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

2023-11-17

什么是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知识!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python爬虫从入门到精通:(12)cookie_Python涛哥 的相关文章

随机推荐

  • XShell连接ubuntu20.04.LTS

    1 下载Xshell XShell官方下载地址 打开XSHELL官方下载地址 我们可以选择 家庭和学校用户的免费许可证 输入邮箱之后即可获得下载链接 安装非常简单 跟着提示进行即可 2 连接ubuntu 2 1 查看ubuntu的ip地址
  • Vue 父子组件通信v-model .sync修饰符

    一 v model简化父子组件通信 v model是什么 v model 是Vue框架的一种内置的API指令 本质是一种语法糖写法 它负责监听用户的输入事件以更新数据 并对一些极端场景进行一些特殊处理 v model实现表单的双向绑定
  • 算法:回文链表

    234 回文链表 给你一个单链表的头节点 head 请你判断该链表是否为回文链表 如果是 返回 true 否则 返回 false 示例 1 输入 head 1 2 2 1 输出 true 示例 2 输入 head 1 2 输出 false
  • ReID专栏(三) 注意力的应用

    前言 本文中提出了一种用于行人重识别的注意感知特征学习方法 该方法由一个部分注意分支 PAB 和一个整体注意分支 HAB 组成 并与基础再识别特征提取器进行了联合优化 由于这两个分支建立在主干网络上 因此没有为ReID特征提取引入额外的结构
  • 客户管理系统CRM表格版,含销售合同客户关系维护等功能

    客户管理系统CRM表格版 含销售合同客户关系维护等功能 系统由EXCEL开发 绿色安全 简单好用 送VBA宏插件编号 139653845009471设计师儿
  • 来自国际大厂Cloudflare的免费项目cloudflared

    在此之前 大家可以先去看看项目 https github com cloudflare cloudflared 事先声明 本人使用Ubuntu2204系统搭建 理论上适合Debian系Linux系统 Redhat系需要修改相关命令 其他系统
  • super和this关键字

    一 super关键字的应用场景 1 访问父类的成员变量 2 访问父类的构造函数 3 访问父类的方法 二 super关键字的使用 class Animal protected String name 注意 若限定符是private 子类无法使
  • 项目中都要掌握的BAPI之过账BAPI “ BAPI_ACC_DOCUMENT_POST”

    SAP FI 会计凭证过账 BAPI ACC DOCUMENT POST 该过账BAPI需要和模拟过账的BAPI BAPI ACC DOCUMENT CHECK 搭配使用 这样先执行模拟过账 成功了再执行真正的过账 这样就不会因为执行失败产
  • OpenGL加速渲染:显示列表glGenLists

    在OpenGL中 可能要用非常多的点 线 面来构成一幅图 若进行实时渲染 无疑对显示效率有非常大的影响 比如要画几百万个三角形 那么很可能旋转一下图片需要响应很久 为了加速渲染 可以将需要绘制的部分放在显示列表glGenLists中 每一个
  • git仓库完整迁移(代码,分支,提交记录)

    背景 我们公司使用Git进行版本控制 并使用gitlab搭建了公司的私有Git仓库 后期项目逐渐增多 项目老大为了统一项目权限管理 决定将不同项目统一放到一个Group中 一旦进行项目迁移 项目的git远端地址会发生变化 现在项目正在开发当
  • JavaScript单向链表结构

    JavaScript单向链表结构 h1 见控制台打印 h1
  • 手把手教你使用WinPwn自制iPhone固件

    Pwn破解软件系列的windows版本终于发布 我们可以用这个软件在PC上制作自己的iPhone自制固件 不过根据开发小组介绍这个版本还属于测试版本 某些功能还不能实现 因此破解时需使用Installer下的Bootneuter 详细操作流
  • git常用命令记录

    git常用命令记录 git常用命令 接上一篇搭建hexo github的博客 几次修改文件导致博客无法正常运行 故上传github 备份之 也就有了这篇文章 介绍基本的git命令 git config global user name 你再
  • 股票为什么会涨停?

    原文地址 http news xinhuanet com stock 2004 02 17 content 1318785 htm 股票为什么会涨停 要回答这个问题 有必要先说清楚什么是停板 停板是股票市场中的一种游戏规则 它是为了防止股票
  • 学习C# 哈希表(HashTable)用法

    学习C 哈希表 HashTable 用法 1 哈希表 HashTable 简述 在 NET Framework中 Hashtable是System Collections命名空间提供的一个容器 用于处理和表现类似keyvalue的键值对 其
  • list要点

    基本操作 erase函数 remove函数 特殊变动性操作 List迭代器 list与vector 异常处理 list本质是一个双向链表 其模板定义如下 namespace std template
  • 刷脸支付秒过地铁太快太方便

    刷脸支付让人们生活更便捷 公交卡 零钱 手机统统不用带 在广州 坐地铁只要刷脸就可以啦 据媒体报道 近日 广州首个智慧地铁站开通 乘客可以刷脸无感过闸 300毫秒内完成人脸识别 每分钟可通行40人 几年前 刷脸 还是朋友间用来互相调侃的 转
  • 给服务器端的.git瘦身

    一 背景 git库擅长管理文本型的文件 二进制文件一版不建议用git管理 现在我们已经用git管理的二进制文件 并且已经有了上百个提交 多个分支 且存储的二进制文件的总和已经相当庞大 可能几十个G 上百G 这给我们的git管理带来了以下3问
  • 嵌入式C语言之位操作详解

    1 位操作符 位操作直接将两个操作数按照二进制对应进行操作 例 0xaa 位与 0xf0 0xa0 逻辑操作是 两个操作数整体来操作 例 0xaa 逻辑与 0xf0 1 嵌入式的移位操作针对于无符号数 左移时右侧补0 右移时左侧补0 相当于
  • Python爬虫从入门到精通:(12)cookie_Python涛哥

    什么是cookie 是存储在客户端的一组键值对 web中cookie的典型应用 免密登陆 cookie和爬虫之间的关联 sometime 对一张页面进行请求的时候 如何请求的过程中不携带cookie的话 那么我们是无法请求到正确的页面数据