学习目标
- 知道 requests发送POST请求的方法
- 知道 requests模块使用代理的方法
- 能够说明 requests处理cookie的三种方法
- 能够说明 requests解决https证书错误的问题
- 能够说明 requests中超时参数的使用
- 能够说明 retrying模块的使用
requests发送POST请求的方法
那些地方我们会用到POST请求:
- 登录注册(POST比GET更安全)
- 需要传输大文本内容的时候(POST请求对数据长度没有要求)
用法:
response = requests.post(url, data = data) # data为POST请求发送的数据
data的形式:字典
requests模块使用代理的方法
为什么要使用代理
- 让服务器以为不是同一个客户端在请求
- 防止我们的真实地址被泄露,防止被追究
理解使用代理的过程
理解正向代理和反向代理的区别
被代理的对象不同,反向代理的对象是服务器,正向代理的对象是浏览器
代理的使用
用法:
requests.get(url, proxies = proxies)
代理(proxies)类型:字典
proxies = {
"http" : "http://12.34.56.78:9527",
"https" : "https://12.34.56.78:9527"
}
代理IP的分类
- 透明代理
- 匿名代理
- 高匿代理(推荐使用)
requests处理cookie的三种方法
-
cookie以关键字参数使用
# cookies的形式:字典 cookies = {"cookies的name":"cookies的value"} # 使用方法 requests.get(url, headers = headers, cookies = cookies)
-
在headers中加入cookie
# 把cookie加入headers headers = { "User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36", "Cookie" : "Pycharm-26c2d973=dbb9b300-2483-478f-9f5a-16ca4580177e; Hm_lvt_98b9d8c2fd6608d564bf2ac2ae642948=1512607763; Pycharm-26c2d974=f645329f-338e-486c-82c2-29e2a0205c74" } # 使用方法 requests.get(url, headers = headers)
-
使用requests.session类
session是会话保持
使用方法
session = requests.session() response = session.get(url,headers)
requests解决https证书错误的问题
(12306网站已经更新了SSL证书)
解决办法
import requests
url = "https://www.12306.cn/mormhweb"
responser = requests.get(url, verify=False)
超时参数的使用
在爬虫中,一个请求很久没有结果,就会让整个项目的效率变得非常低,这个时候我们就需要对请求进行强制要求,让他必须在特定的时间内返回结果,否则就报错
使用方法:
response = requests.get(url, timeout = 3)
retrying模块的使用
上述方法能够加快我们整体的请求速度,但是在正常的网页浏览过成功,如果发生速度很慢的情况,我们会做的选择是刷新页面,那么在代码中,我们是否也可以刷新请求呢?
- retry中可以传入参数
stop_max_attempt_number
,让函数报错后继续重新执行,达到最大执行次数的上限,如果每次都报错,整个函数报错,如果中间有一个成功,程序继续往后执行
代码参考
#parse.py
import requests
from retrying import retry
headers = { ... }
@retry(stop_max_attemp_number=3) # 最大重试3次,3次全部报错,才会报错
def _parse_url(url):
response = requests.get(url, headers=headers, timeout=3) # 超时的时候回报错并重试
assert response.status_code == 200 # 状态码不是200,也会报错并充实
return response
def parse_url(url):
try: # 进行异常捕获
response = _parse_url(url)
except Exception as e:
print(e)
response = None
return response