requests模块处理cookie相关的请求,cookie架转换为字典

1 使用requests处理cookie相关的请求

1.1 回顾cookie和session的区别

  • cookie数据存放在客户的浏览器上,session数据放在服务器上。
  • cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗。
  • session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。
  • 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

1.2 爬虫中为什么要使用cookie

  • 带上cookie的好处
    • 能够访问登录后的页面
    • 正常的浏览器在请求服务器的时候肯定会带上cookie(第一次请求某个地址除外),所以对方服务器有可能会通过是否携带cookie来判断我们是否是一个爬虫,对应的能够起到一定的反爬的效果
  • 带上cookie的坏处
    • 一套cookie往往对应的是一个用户的信息,请求太频繁有更大的可能性被对方识别为爬虫
    • 那么上面的问题如何解决 ?使用多个账号

1.3 requests处理cookie相关的请求之session

  • requests 提供了一个叫做session类,来实现客户端和服务端的会话保持

  • 会话保持有两个内涵:

    • 保存cookie
    • 实现和服务端的长连接
  • 使用方法

      session = requests.session()
      response = session.get(url,headers)

     

    session实例在请求了一个网站后,对方服务器设置在本地的cookie会保存在session中,下一次再使用session请求对方服务器的时候,会带上前一次的cookie

1.4 requests处理cookie相关的请求之cookie放在headers中

了解headers中cookie

 

 

  • headers中的cookie:
    • 使用分号(;)隔开
    • 分号两边的类似a=b形式的表示一条cookie
    • a=b中,a表示键(name),b表示值(value)
    • 在headers中仅仅使用了cookie的name和value

cookie的具体组成的字段

 

 

由于headers中对cookie仅仅使用它的name和value,所以在代码中我们仅仅需要cookie的name和value即可

在headers中使用cookie

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来使用更加简单

1.5 requests处理cookie相关的请求之使用cookies参数

  • cookies的形式:字典
cookies = {"cookie的name":"cookie的value"}
  • 使用方法:
requests.get(url,headers=headers,cookies=cookie_dict}


requests模块获取cookie

requests.utils.dict_from_cookiejar:把cookiejar对象转化为字典

import requests

url = "http://www.baidu.com"
response = requests.get(url)
print(type(response.cookies))

cookies = requests.utils.dict_from_cookiejar(response.cookies)
print(cookies)
输出为:

<class 'requests.cookies.RequestsCookieJar'>
{'BDORZ': '27315'}

 

posted @ 2019-11-13 18:57  阿磊小哥哥呀  阅读(445)  评论(0)    收藏  举报