python爬虫基础

与爬虫性能相关:并发方案(类似多线程)。在网络延迟的时候继续发送其他请求,即异步IO:gevent/ Twisted/ asyncio/ aiohttp

IO多路复用:select

Scrapy框架:

Tornado框架(异步非阻塞)

 

爬虫实例之汽车信息

requests是请求访问网站的模块:

使用方法有requests.get(url);请求获取的内容递给response,有response.text, response.content, response.encoding, response.apparent_encoding, response.status_code等

BeautifulSoup是解析网站的模块:

soup=BeautifulSoup(response.text,features='html.parser'或者'lxml')

soup.find('div')

soup.find('div',id='i1') #使用多参数

soup.find('div',nid='i1')

soup.find_all('div') #返回列表

print(soup.find。。。)

 

 1 import requests
 2 from bs4 import BeautifulSoup
 3 import uuid #随机取名库
 4 
 5 url='https://www.autohome.com.cn/news/'
 6 response=requests.get(url)#获取url
 7 response.encoding=response.apparent_encoding#设置网页编码格式,防止乱码
 8 soup=BeautifulSoup(response.text,features='lxml')
 9 target=soup.find(id='auto-channel-lazyload-article')#div标签内容
10 li_list=target.find_all('li')#找到所有li标签的内容
11 for i in li_list:
12     a=i.find('a')
13     if a:           #若li标签下有a标签则获取内容
14         print('https:'+a.attrs.get('href'))
15         text=a.find('h3').text #将text转换成字符串类型,若无.text,则为标签类型
16         print(text,type(text)) #查看什么类型
17         img_url=a.find('img').attrs.get('src')
18         print('https:'+img_url)
19         img_response=requests.get(url='https:'+img_url)
20         file_name=str(uuid.uuid4())+'.jpg'
21         with open(file_name,'wb') as f:
22             f.write(img_response.content)

 自动登录

要想实现自动登录,就必须拿到授权的cookies。有时候需要先发送一个请求,获取cookies,再用这个去登录;但往往直接发送登录请求,也能获得授权的cookies,并用这个实现自动登录。

 1 import requests
 2 
 3 r1=requests.get('https://dig.chouti.com/')
 4 r1_cookies=r1.cookies.get_dict()#获取第一个cookies
 5 print(r1_cookies)
 6 
 7 post_dict={'phone':'+8618059265202',
 8            'password':'cz19960000'
 9            }
10 r2=requests.post(url='https://dig.chouti.com/login',data=post_dict,cookies=r1_cookies)#需要携带第一次的cookies
11 print(r2.text)
12 r2_cookies=r2.cookies.get_dict()#获取第二次的cookies
13 print(r2_cookies)
14 
15 r3=requests.get(url='https://dig.chouti.com/link/vote', cookies=r1_cookies)#携带cookies自动点赞
16 print(r3.text)

 

requests模块的用法有requests.get(), requests.post(), requests.options(), requests.request()等,它们都要调用request,故可以归结为requests.request(),其中参数有method(如get,post等),url,params(在url上传递的参数)

-method -url -params 

-data :在请求体里传递的数据,data={'user':'alex', 'pwd':'123'}或者data='user=alex&pwd=123',传递时有请求头和请求体,根据请求头决定是否发送请求体(user=alex&pwd=123),

字典数据里面不能套用字典

-json:也是在请求体里传递的数据,json={'user':'alex', 'pwd':'123'},与data传递数据的格式不同,json直接将数据转换成一个整体的字符串’{'user':'alex', 'pwd':'123'}‘发送过去,请求体和

请求头与data不同,字典里面可以嵌套字典

-headers: 包含登录前访问的地址,网站判断是否人工登录时,会先检测上一个网址是不是它的地址,是则可以登录,这个网址保存在登录操作时的Refer中; 而User-Agent则说明是在哪个

浏览器登录的,因此可以更改User-Agent伪造登录机器。如headers={'Refer‘:'https://github.com/', 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}

-cookies:  存放在headers中

-files:  传递的文件参数,files={'f1': open('s1.py', 'rb'), 'f2': open('s2.py', 'rb)}, file中的元素也可以是元组,如'f2': ('ss.py',open('s2.py', 'rb)),第一个参数作为文件名上传

-auth: 携带用户名和密码加密到请求头

-allow_redirect(是否允许重定向) , -proxies(代理), -verify(是否忽略证书), -stream(大容量文件迭代传输), -cert(证书)

-session: 自动处理cookies,而不用自己每次手动传递cookies,

1 import requests

2 session=requests.Session()

3 post_dict={'phone':'+8618059265202',

         'password':'cz19960000'
        }

4 r1=session.get('https://dig.chouti.com/')
5 r2=session.post(url='https://dig.chouti.com/login',data=post_dict)

 举例:requests.request('get', url='https://www.baidu.com', params={'k1':'v1', 'k2':'v2'}, data={'user':'alex', 'pwd':'123'}, json={'user':'alex', 'pwd':'123'},

headers={'Refer‘:'https://github.com/'}) #https://www.baidu.com?k1=v1&k2=v2

 

 

 

 

posted @ 2019-06-16 21:48  czmir  阅读(108)  评论(0编辑  收藏  举报