程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

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

发布于2019-10-29 14:18     阅读(704)     评论(0)     点赞(4)     收藏(1)


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/>]>
"""
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

另外: 附带 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'})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22


所属网站分类: 技术文章 > 博客

作者:头疼不是病

链接:https://www.pythonheidong.com/blog/article/147483/494531095f13491bde60/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

4 0
收藏该文
已收藏

评论内容:(最多支持255个字符)