requests进阶

2019-05-07  本文已影响0人  Donald_32e5
一、requests处理cookies

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、证书处理错误


在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身份验证
import requests
from requests.auth import HTTPBasicAuth

auth = HTTPBasicAuth('账号', '密码')

a = requests.get('目标网址', auth=auth).content.decode()
print(a)

上一篇 下一篇

猜你喜欢

热点阅读