Python爬虫从入门到精通:(12)cookie_Python涛哥

45 篇文章 18 订阅

什么是cookie?

  • 是存储在客户端的一组键值对
  • web中cookie的典型应用:免密登陆

cookie和爬虫之间的关联:

sometime,对一张页面进行请求的时候,如何请求的过程中不携带cookie的话,那么我们是无法请求到正确的页面数据。因此cookie是爬虫中一个非常典型且常见的反爬机制


还是照旧,我们以实际例子看下:

需求:爬取雪球网中的咨询信息。https://xueqiu.com

正常思路分析:

  1. 判定爬取的咨询数据是否为动态加载数据

    此网页下滑可以更新数据,不用分析都是知道肯定是这个动态加载数据的。

    相关的更多咨询数据是动态加载的,滚轮滑动到底部的时候会动态加载更多的数据

  2. 那我们就定位到ajax请求的数据表,提取出请求的url,响应数据为json形式的咨询数据

在这里插入图片描述

代码实现:

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'
}
url = 'https://xueqiu.com/statuses/hot/listV2.json?since_id=-1&max_id=258231&size=15'

page_text = requests.get(url=url, headers=headers).json()
print(page_text)

爬取结果:
在这里插入图片描述

额,直接就打印个错误!那看来用我们以往的正常方式爬取是不行的


cookie处理

上面问题:我们没有请求到我们想要的数据

原因:我们没有严格意义上模拟浏览器发请求
在这里插入图片描述

我们发现,请求头跟之前学习的网站不一样。这个请求头里有很多内容,尤其是cookie比较多,那么可以确定,这个地址是需要携带cookie才可以访问的。

处理:可以将浏览器发请求携带的请求头,全部粘贴在headers字典中,将headers坐拥到requests的请求操作中即可

处理之前,先介绍下 cookies的处理的方式

  • 方式1:手动处理:
  1. 将抓包工具中的cookie粘贴在headers中
  2. 弊端:cookie如何过了有效市场则该方式失效

这种方式虽然简单有效,但众所周知,cookie是有有效期的。比如:我们登陆了一个网站,长时间不去再次登陆的话,浏览器就不会自动登陆了。

这种方式适合短暂爬取数据比较方便。

  • 方式2:自动处理
  1. 基于session对象实现自动处理

    如何获取一个Session对象:requeste.Session()返回一个session对象

  2. session对象的作用:

    该对象可以向requests一样调用get和post发起指定的请求。

    只不过如果在使用session发请求的过程中如果产生了cookie,则cookie会被自动存储到该session对象中,那么就意味着下次在使用session对象发起请求,则该次请求就是携带cookie进行的请求发送。


在爬虫中使用session的时候,session对象至少会被使用几次?

​ 两次,第一次使用session是为了将cooike捕获存储到session对象中。 下次的时候就是携带cookie进行的请求发送

我们来重写下上面的代码:

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'
}

# 创建session对象
session = requests.Session()  

# 第一次使用session捕获且存储cookies,猜测对雪球网的首页发起的请求可能会产生cookie
main_url = 'https://xueqiu.com/'
session.get(url=main_url, headers=headers)  # 捕获且存储cookie

url = 'https://xueqiu.com/statuses/hot/listV2.json?since_id=-1&max_id=258231&size=15'

page_text = session.get(url=url, headers=headers).json()  # 携带cookie发起的请求
print(page_text)

果然,我们爬取到了数据!

在这里插入图片描述

cookie是最常见的反爬机制之一,我们一定要熟悉分析和写作。

关注 Python涛哥,学习更多Python知识!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值