requests高级之cookie

  • 什么是cookie?
    • cookie的本质就是一组数据(键值对的形式存在)
    • 是由服务器创建,返回给客户端,最终会保存在客户端浏览器中。
    • 如果客户端保存了cookie,则下次再次访问该服务器,就会携带cookie进行网络访问
      • 典型案例:网站的免密登录
  • 需求:爬取雪球网咨询数据
  • 通过浏览器抓包工具分析,页面数据为动态加载;
  • 直接对url发起请求:
    • 结果报错了;
    • 报错信息为:
    • 分析:
      • 使用浏览器的时候,并不需要登录操作;
      • 只要爬虫拿不到你想要的数据,唯一的原因是爬虫程序模拟浏览器的力度不够!一般来讲,模拟的力度重点放置在请求头中!
      • 此案例,只需要在请求头headers中添加cookie即可!
import requests

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36'
}
url = 'https://xueqiu.com/statuses/hot/listV2.json'
param = {
    "since_id" : "-1",
    "max_id":"32650",
    "size":"15"
}

response = requests.get(url = url,headers = headers,params = param)
page_text = response.text
print(page_text)
  • 添加cookie的两种方式:
    • 手动处理:将抓包中的cookie数据添加到headers中即可
      • 缺点
        • 编写麻烦
        • cookie都具有时效性,一段时间后需要重新赋值
    • 自动添加
      • 基于session对象自动处理cookie
        • 1.创建一个空白的session对象
        • 2.使用session对象发起请求,目的是为了获取cookie
          • 如果session对象在发请求的过程中,服务器端产生了cookie,则cookie会自动存储在session对象中
        • 3.使用携带cookie的session对象发起请求
        • 注意点:session对象至少需要发起两次请求
          • 第一次请求的目的是为了捕获存储cookie到session对象
          • 第二次的请求,就是携带cookie发起的请求了
import requests
#1.创建一个空白的session对象
session = requests.Session()

headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36',
}
main_url = 'https://xueqiu.com/'
#2.使用session发起的请求,目的是为了捕获到cookie,且将其存储到session对象中
session.get(url=main_url,headers=headers)

url = 'https://xueqiu.com/statuses/hot/listV2.json'
param = {
    "since_id": "-1",
    "max_id": "311519",
    "size": "15",
}
#3.就是使用携带了cookie的session对象发起的请求(就是携带者cookie发起的请求)
response = session.get(url=url,headers=headers,params=param)
data = response.json()
print(data)
posted @ 2022-03-20 10:29  Tony_xiao  阅读(554)  评论(0)    收藏  举报