一、requests处理cookies
- 1、cookie字符串放在headers中
- 2、把cookie以字典传给cookies参数接受
- 3、使用requests提供的session
I、cookies放在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; _xsrf=2|d1a3d8ea|c5b07851cbce048bd5453846445de19d|1522379036"}
requests.get(url,headers=headers)
*注意:cookie有过期时间 ,所以直接复制浏览器中的cookie可能意味着下一程序继续运行的时候需要替换代码中的cookie,对应的我们也可以通过一个程序专门来获取cookie供其他程序使用;当然也有很多网站的cookie过期时间很长,这种情况下,直接复制cookie来使用更加简单
II、用字典的形式传入参数
cookies = {"cookie的name":"cookie的value"}
requests.get(url, headers=headers, cookies=cookie_dict}
III、使用session
session = requests.session()
response = session.get(url, headers)
*注:session实例在请求了一个网站后,对方服务器设置在本地的cookie会保存在session中,下一次再使用session请求对方服务器的时候,会带上前一次的cookie
二、requests其他处理方法
I、cookirJar的使用
import requests
a = requests.get('https://www.baidu.com/')
print(a.cookies)
dd = requests.utils.dict_from_cookiejar(a.cookies)
print(dd)
----------------
# <RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
# {'BDORZ': '27315'}
*注:把cookies转化为字典,前面的session是不需要对cookies做任何操作的
II、证书处理错误
![](https://img.haomeiwen.com/i14229282/0534dde82ab20efe.png)
在requests库中默认附带了一套它信任的根证书,如果他解析失败,直接关闭验证即可
requests.get(url,verify=False)
III、retrying模块的使用
在浏览器中浏览数据时,如果数据加载较慢,通常会刷新界面,retrying就是提供类似刷新的方法
import requests
from retrying import retry
headers = {}
#最大重试3次,3次全部报错,才会报错
@retry(stop_max_attempt_number=3)
def _parse_url(url)
#超时的时候回报错并重试
response = requests.get(url, headers=headers, timeout=3)
#状态码不是200,也会报错并重试
assert response.status_code == 200
return response
def parse_url(url)
try: #进行异常捕获
response = _parse_url(url)
except Exception as e:
print(e)
#报错返回None
response = None
return response
三、requests身份验证
![](https://img.haomeiwen.com/i14229282/a93ef340f0c97a45.png)
- 有时候网页会弹出一个登陆窗口,类似assert,他没有HTML表单。
- auth可以提供验证
import requests
from requests.auth import HTTPBasicAuth
auth = HTTPBasicAuth('账号', '密码')
a = requests.get('目标网址', auth=auth).content.decode()
print(a)
网友评论