【BOOK】requests库
一、 Request库
1、 GET请求
抓取页面(添加headers,修改headers,防止被网站拦截)
#抓取网页,知乎 import requests import re ## 浏览器标识 headers = {'user-agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"} r = requests.get('https://www.zhihu.com/explore', headers=headers) pattern = re.compile('explore-feed.*?question_link.*?>(.*?)</a>', re.S) titles = re.findall(pattern, r.text) print(titles)
抓取二进制数据(图片、音频、视频…)
## 抓取二进制数据,获取github的图标,放在当前目录下 import requests r = requests.get('https://github.com/favicon.ico') with open('favicon.ico', 'wb') as f: f.write(r.content)
2、 POST请求(提交表单信息)
3、 响应(提交请求,返回响应)
4、 文件上传
# 文件上传 import requests files = {'file':open('favicon.ico','rb')} r = requests.post('http://httpbin.org/post', files=files) print(r.text)
5、 获取、设置Cookies【保存登录状态】
## 获取Cookies import requests r = requests.get('https://baidu.com') print(r.cookies) ## RequestsCookieJar类型 #Cookie遍历解析:item()方法将cookies转换成元组,遍历每一个Cookie的名称和值 for key,value in r.cookies.items(): ##items()将cookies装华为元组组成的列表,遍历每一个cookie的名称和值 print(key + '=' + value)
## Cookies保持登录状态 ## 直接在已经登录的网页上获取cookie,赋值给headers import requests headers = { 'cookie':'_zap=bf241714-d6f9-4e5f-9608-fa7b85f32db6; _xsrf=79ff86e9-5e76-4fa6-a384-4f528af88eb9; d_c0="AHBWI_Li4RCPTpXmzvEr1EkNgFDaBMtY-nA=|1582816893"; __guid=74140564.2608088362801457700.1582816893817.983; _ga=GA1.2.1547480939.1582816896; _gid=GA1.2.1931834251.1582816896; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1582816896; capsion_ticket="2|1:0|10:1582818182|14:capsion_ticket|44:MDhiMmFkNmY0YjI1NGRkYzgxMGZkY2Q3Mzk3YWYxZjU=|5bfdca13743bf8cb5de50f1c152f7d51120a4bf811eb2bfafdfc1079d69ffa9d"; z_c0="2|1:0|10:1582818209|4:z_c0|92:Mi4xSU00SERnQUFBQUFBY0ZZajh1TGhFQ2NBQUFDRUFsVk5vSEJfWGdDU2JjQkRxS3JNdElMNmZ3UjIzUVZ1WThyWWFn|61d7ba8d2dca14b10c7004277e43687cc4ef25116720ae3649d656dcc8cfef26"; monitor_count=3; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1582818210; KLBRSID=e42bab774ac0012482937540873c03cf|1582818280|1582816893', 'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' } r = requests.get('https://www.zhihu.com/people/kuluma-59', headers=headers) print(r.text)
6、 会话维持—Session对象
每次使用get()或者post()方法提交请求,相当于不同的会话,等于使用了两个浏览器打开不同页面。
使用Session对象可以维护一个会话,不用担心cookie问题
用于模拟登录
import requests #第一次提交请求,设置cookie requests.get('http://httpbin.org/cookies/set/number/123456789') #第二次提交请求,没有设置cookie r = requests.get('http://httpbin.org/cookies') #获取最近一次请求的cookie print(r.text) #"cookies": {} import requests ## Session()对象会维持同一个会话 s = requests.Session() s.get('http://httpbin.org/cookies/set/number/123456789') r = s.get('http://httpbin.org/cookies') print(r.text) # "cookies": {"number": "123456789"}
7、 SSL证书验证--vertify参数
如果在请求页面时出现 SSLError 表示证书验证出错,网站的证书没有被官方CA机构信任
需要修改 vertify参数为False,默认时True,这样就会请求成功
import requests import requests.packages import urllib3 urllib3.disable_warnings() ##运行程序时,忽略警告 r = requests.get('https://www.12306.cn', vertify=False) print(r.status_code)
8、 代理设置—proxies参数
大规模且频繁请求网站,可能会弹出验证码或跳转到登录页面,或者封禁IP
※HTTP代理
import requests proxies = { 'http':'http://user:password@host:port' } requests.get('https://www.taobao.com', proxies=proxies)
※SOCKS协议代理
先安装socks库: pip install ‘requests[socks]’
import requests proxies = { 'http':'socks5://user:password@host:port', 'https':'socks5://user:password@host:port' } requests.get('https://www.taobao.com', proxies=proxies)
9、 超时设置—timeout参数
超过设置时间还未响应就抛出异常
10、身份认证
import requests r = requests.get('http://localhost:5000', auth=('username','password')) print(r.status_code) ## 用户名密码正确返回200,否则401
11、Prepared Request
将请求表示为数据结构