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