requests介绍
requests库是python优秀的第三方http请求库,使用起来简洁强大,需要额外安装。
可使用pip工具安装 : pip install requests
基本用法
-
请求网页
import requests response = requests.get("https://www.baidu.com")
仅需简单一步便可实现各种方法的请求(还有post(), put(), delete()等请求方法)
响应的response对象包括text,cookies,content,headers,statuts_code,url,history等属性可直接使用。 -
传入参数
需要在传入参数时可使用params这个参数。import requests data = { 'name':'jaychou', 'age':22 } r = requests.get('http://httpbin.org/get',params=data) print(r.json()) #json()方法可将json字符串转化为字典,(字符串里必须时json格式)
-
添加headers
先构造headers字典,在User-Agent字段设置请求头,再在方法使用headres参数构造请求。import requests headers = { 'User-Agent':'Mozilla/5.0' } r = requests.get('https://www.zhihu.com/explore',headers=headers)
-
POST请求
使用data参数传入数据。import requests data = { 'name':'jaychou', 'age':22 } r = requests.post('http://httpbin.org/post',data=data)
高级用法
基本的请求实现了,而高级一点的功能(如Cookies设置,代理设置等)用requests库实现也十分简单,不用像urllib库那样需要用handler来构建opener。
-
文件上传
可用requests模拟提交一些数据文件:import requests files = {'file': open('photo.jpg','rb')} r = requests.post('http://httpbin.org/post',files=files)
-
Cookies设置
- 获取cookies:直接使用response对象的cookies属性获取。
import requests r = requests.get('https://www.baidu.com) print(r.cookies)
- 使用cookie来维持登录状态 : 在请求头的Cookie字段设置你自己的cookie。
import requests headers = { 'Cookie':'你的cookie', 'User-Agent':'Mozilla/5.0' } r = requests.get('https://www.zhihu.com',headers=headers)
-
会话维持
用requests.get()等方法打开的页面就是一个新的会话,相当于新开了一个浏览器打开。 这样不利于持续的访问网站,这时就需要维持当前会话,requests中使用Session对象来维持会话,而不用担心cookies问题。import requests s = requests.Session() s.get('http://httpbin.org/cookies/set/number/1234') #设置cookie r = s.get('http://httpbin.org/cookies') #重新访问看cookie是否保存,保存则说明是同一个会话。
-
SSL证书验证
当发送HTTP请求时,requests会自动检查SSL证书,可以使用verify参数设置为False来跳过证书的检查。 -
代理设置
使用proxies参数设置代理:import requests proxies = { 'http':"http://10.10.1.10:3128", 'https':'https://10.10.1.10:1080' } requests.get('https://www.taobao.com",proxies=proxies)
#如果需要认证,可这样设置代理http://user:password@host:port
-
超时设置
可使用timeout参数设置响应时间,超过这个时间便会报错,避免响应太慢时一直等待,时间单位为秒。
r = requests.get('url',timeout=1)
-
身份认证
import requests r = requests.get('http://localhost:5000',auth=('username','password')) #第二种认证方法 # import requests # from requests.auth import HTTPBasicAuth # # r = requests.get('http://loaclhost:5000',auth=HTTPBasicAuth('username','password'))
-
Prepared Request
from requests import Request, Session url = 'http://httpbin.org/post' data = { 'name':'jaychou' } headers = { 'User-Agent':'Mozilla./5.0' } s = Session() req = Request('POST',url,data=data,headers=headers) prepped = s.prepare_request(req) r = s.send(prepped) print(r.text)
这里引入了Request,将各个参数构造成一个Request对象,再用Session的prepare_request()方法将其转化为一个Prepared Request对象,最后调用send()发送即可。