爬虫利器 python中 session自动携带响应的cookie功能

session的两大作用

1. 会话保持

网上描述一大堆,此处不在赘述;

2. 自动携带响应的cookie

大家知道有些链接在请求时,需要携带cookie字段,而这些cookie字段部分需要从某些响应头里获取(另一部分通过抓包或者js获取),提取后再添加到下一个url的请求中。这样就很麻烦;使用session的好处是:使用session则可以将响应头的cookie自动放入RequestsCookieJar,在下次请求时会自动携带。
我们通过代码查看如下:

def china_189_session():
    """session test"""
    session = requests.session()
    response = session.post(url='http://189.cn/dqmh/system.do?operate=index',
                  headers={
                        "Host": "189.cn",
                        "Origin": "http://189.cn",
                        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36",
                        "DNT": "1",
                        "Accept": "*/*",
                        "Referer": "http://189.cn/",
                        "Accept-Encoding": "gzip, deflate",
                        "Accept-Language": "zh-CN,zh;q=0.9"
                    }
                  )
    print(response.status_code)
    print(response.headers.get('Set-Cookie'))
    print(session.cookies)
    print('\n')
    url = 'https://kxlogo.knet.cn/seallogo.dll?sn=e12050811010020422307708&size=0'
    response = session.get(url=url,
                             headers={
                                 "Host": "kxlogo.knet.cn",
                                 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36",
                                 "Accept": "*/*",
                                 "DNT": "1",
                                 "Referer": "http://189.cn/",
                                 "Sec-Fetch-Site": "cross-site",
                                 "Accept-Encoding": "gzip, deflate",
                                 "Accept-Language": "zh-CN,zh;q=0.9"
                             })
    print(response.status_code)
    print(response.headers.get('Set-Cookie'))
    print(session.cookies)

"""
运行输出:
200
JSESSIONID-JT=D1F5BD024D997F7E9ACE1F3EB74113FF-n3; Path=/; HttpOnly, dqmhIpCityInfos=%E4%B8%8A%E6%B5%B7%E5%B8%82+%E8%81%94%E9%80%9A; Domain=.189.cn; Expires=Wed, 27-Nov-2019 03:49:33 GMT; Path=/
<RequestsCookieJar[<Cookie dqmhIpCityInfos=%E4%B8%8A%E6%B5%B7%E5%B8%82+%E8%81%94%E9%80%9A for .189.cn/>, <Cookie JSESSIONID-JT=D1F5BD024D997F7E9ACE1F3EB74113FF-n3 for 189.cn/>]>


200
KXUUID="672b9b94cIRHA/rtpg/mzKRY0Xf4hx4IgeF8reK822M68dHjxGc="; Version=1; Domain=.knet.cn; Max-Age=2147483646; Expires=Sat, 15-Nov-2087 07:03:39 GMT; Path=/
<RequestsCookieJar[<Cookie dqmhIpCityInfos=%E4%B8%8A%E6%B5%B7%E5%B8%82+%E8%81%94%E9%80%9A for .189.cn/>, <Cookie KXUUID="672b9b94cIRHA/rtpg/mzKRY0Xf4hx4IgeF8reK822M68dHjxGc=" for .knet.cn/>, <Cookie JSESSIONID-JT=D1F5BD024D997F7E9ACE1F3EB74113FF-n3 for 189.cn/>]>
"""

另外: 附带 RequestsCookieJar 和cookies格式的相互转换方法

def getCurrCookie(cookiejar):
    '''
    cookiejar 转为字典
    :param cookies:cookiejar  (self.session.cookies)
    :return: cookie:dict
    '''
    cookie = requests.utils.dict_from_cookiejar(cookiejar)
    return cookie


def cookie_from_session(cookie):
    """
    cookie 添加到session
    :param cookie: dict json
    :return:
    """
    cookie_dict = json.loads(cookie)
    for k, v in cookie_dict.items():
        session.cookies.set(k, v)

#	向session中单独添加某个cookie字段 可使用update  如添加 'login_account=1'
self.session.cookies.update({'login_account': '1'})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值