1.概述
上一次讲了urllib
库的使用,但是其中有很多的不方便,处理网页验证和Cookie
时候,需要写opener
和hanler
出咯,为了方便实现这些操作,需要有一个更加强大库,requests
,它在COOkie
、登陆验证、代理设置等操作十分简洁。
2. requests库基本用法
2.1 GET请求
import requests
r=requests.get('http://www.baidu.com')
print('type(r)\n',type(r))
print('code(r)\n',r.status_code)
print('text(r)\n',r.text)
print('cookie(r)\n',r.cookies)
如何添加请求的字段呢?
两种方法:
一种是get
请求直接在url
里面,但是这样很麻烦。
第二种是:设置一个字典,设置其健值对,然后使用params
参数传给requests.get(url='',params='')
,r.text()
是str
格式,如果想直接解析返回结果,得到字典的话,可以直接调用json(方法)
,r.json()
将str
格式转换为字典格式。
如何抓取二进制数据?
页面是html
文档,如果抓图片视频等文件,得拿到它们的二进制码。使用r.content()
方法得到二进制码,然后将其以二进制的形式写入文档。
如何添加headers
?
生成一个headers
字典,给其键值对赋值,然后将其加入get
方法的headers
参数。
2.2 POST请求
requests.post(url='',data='',headers='')
data
是请求的表单数据,haeders
依然是头。
如何知道请求的数据是成功的?
使用r.status_code
可以获得状态码,如果得到的是200
就是返回请求页面,其他的状态码其他部分可以查询网上参考。
当然响应头也可以通过r.headers
得到它是一个字典,然后响应的cookie
也可以通过r.cookie
得到。
requests
还提供内置的状态码查询对象erquests.codes
可以判断请求是否成功
exit() if not r.status_code==requests.codes.ok else print('Requests successfully')
2.3 文件上传
files={'file':open('文件名’,‘rb')
r=requests.post(url='',files=files)
响应体里面会包含files
这个字段,而form
字段是空的,文件上传会单独有一个files
字段来标识。
2.4 Cookies设置
get
方式获取cookie
import requests
r=requests.get('http://www.baidu.com')
print(r.cookies) #获取响应的cookie
for key,values in r.cookies.items():
print(key+'='+value)
GET
请求维持会话使用cookie
在headers
里面加入Cookie
字段,就可以维持会话。
建立RequestCookieJar
对象,使用复制下来的cookies
利用split()
方法分割cookie
,然后健值对给jar
设置cookie
,最后加到POST
方法里面。
维持同一个会话,使用session
对象,就相当于打开一个新的浏览器选项卡而不是新开一个浏览器,不用每次都设置cookies
。
import requests
s=requests.Session()
s.get('url')
r=s.get(url)
它经常用于模拟登陆成功之后进一步的操作。
2.5 SSL证书验证
import requests
from requests.packages import urllib3
urllib3.disable_warnings() #忽略警告的方式屏蔽警告
response=requests.get('https://www.12306.cn',verify=False) #verify如果为TRUE会自动验证证书,我们忽略证书验证。
2.6 代理设置
大规模爬取网站会弹出验证码,导致一定时间段无法访问,所以设置代理解决这个问题,需要用到proxies
参数。
import requests
proxies={
'http':'http://user:password@ip地址'}
requests.get(url='',proxies='')
2.7 超时设置
有时候由于本机网络不好,我们等待很久才收到响应。为了防止这种情况,设置一个超时时间。增加一个timeout
字段,单位为秒。永久等待设置为None
或者不加参数。
2.8 身份认证
import requests
r=requests.get(url='',auth=('username','password')
print(r.status_code)
2.9 封装请求的数据结构Prepared Request
from requests import Request,Session
url=''
data={}
headers={}
s=Session()
req=Request(method='',url,data=data,headers=headers)
pre=s.prepare_request(req)
r=s.send(pre)
print(r.text)
3. 总结
requests
库为常用库,一定得掌握,urllib
了解就ok