Python3 爬虫 数据抓包
一、数据抓包
所谓抓包(Package Capture),简单来说,就是在网络数据传输的过程中对数据包进行截获、查看、修改或转发的过程。如果把网络上发送与接收的数据包理解为快递包裹,那么在快递运输的过程中查看里面的内容,这就是抓包。
二、Charles的介绍和使用
在分析异步加载的网页时,Chrome的开发者工具非常好用。通过在开发者工具的“Network”选项卡中寻找被加载的数据,然后用Python模拟出这个数据的请求,从而直接访问网站的后台接口,就可以得到数据。
但是开发者工具有一个特别不方便的地方,那就是没法对数据进行搜索。如果想知道一个特定的异步加载内容来自哪个请求,必须在“Network”选项卡里面一个请求一个请求地进行查看。如果一个网页的请求有几百个,那么这样寻找起来是非常费时、费力的。要简化寻找数据的过程,就需要设法直接全局搜索网页的所有请求的返回数据。
为了实现这个目的,就需要使用Charles。Charles是一个跨平台的HTTP抓包工具。使用它可以像Chrome一样截取HTTP或者HTTPS请求的数据包。同时Charles还有Chrome所不具备的很多奇妙功能。
三、Charles的安装和使用
Charles是一个收费软件,官方网站地址为https://www.charlesproxy.com/。如果没有注册,安装以后的前30天可以正常使用。30天以后,虽然功能不会缩水,但每过30分钟Charles会自动关闭一次。
Charles有Windows 32位/64位版、Mac OS版和Linux 64位版。读者可在下载页面选择符合自己系统的版本进行下载。
Charles的下载和安装没有任何难点。在Windows系统中,直接双击安装文件进行安装即可,任何设置都不需要修改,同意许可协议以后,一直单击“Next”按钮直到安装完成;在Mac OS系统中双击下载下来的.dmg文件,同意许可协议以后,把Charles的水瓶图标拖到Application这个文件夹里面即可。安装完成后,第一次运行Charles会弹出一个对话框,提示需要获取权限来自动配置网络,单击“Grant Privileges”按钮并输入系统密码运行即可。
四、Charles的使用
Charles上面滚动的数据就是目前计算机发起的数据包。单击工具栏上面的黄色笤帚图标,可以清空当前的数据包记录;单击笤帚右边的红色圆点图标,可以停止抓包,且红色圆点变成灰色圆点。暂停以后再单击灰色圆点,Charles恢复抓包。在Charles启动时,系统自带浏览器的所有HTTP流量都会经过Charles,此时可以看到数据包。在数据包非常多的情况下,使用Charles的过滤功能来对数据包进行过滤从而减少干扰。在Filter这一栏中输入域名,就可以显示只包含这个域名的数据包;单击“Filter”输入框下方的“Contents”按钮,查看数据包的详细信息。
如果浏览器是Chrome,在没有安装第三方代理插件的情况下,Chrome的HTTP流量都会经过Charles。但是如果安装了第三方的类似于SwitchyOmega这种代理插件,那么就可以在插件里面添加一个代理,代理IP为127.0.0.1,端口为8888。在Chrome使用这个代理的情况下,就可以正常让Charles监控流量了,计算机上的任意软件,如果支持自定义代理的功能,那么设置代理IP为127.0.0.1,端口为8888,也可以让Charles监控这个软件。当Charles抓包以后,在Mac OS系统下可以按Command+F组合键,在Windows系统下按Ctrl+F组合键打开Charles进行搜索。
有一点需要注意,JSON里面的中文是无法直接搜索到的,为了搜索到中文,需要首先在Python里面创建一个带中文的字典或者列表,然后把它转换成JSON,再从JSON中复制出中文对应的Unicode码来进行搜索。
五、抓取HTTPS数据包
如果使用Charles直接抓取HTTPS的数据包,就会出现大量的Method为CONNECT的请求,但是这些请求又全部都会失败。出现这种情况,是因为没有安装SSL证书导致的。要安装SSL证书,可选择菜单栏的“Help”- “SSL Proxying”-“Install Charles Root Certificate”命令。
对于Mac OS系统,“钥匙串访问”窗口会自动弹出来,Charles的证书已经出现在了其中;双击Charles证书所在的这一行,在新打开的窗口中展开“信任”三角形按钮,将“使用此证书时”设定为“始终信任”;关闭这个弹出来的窗口,系统会自动弹出输入密码的窗口,输入密码以后,证书就安装好了。
对于Windows系统,选择菜单栏中的“Help”- “SSL Proxying”-“Install Charles Root Certificate”会自动弹出证书信息,单击“安装证书”按钮,打开证书导入向导然后,单击“下一步”按钮,选择“将所有的证书都放入下列存储”单选按钮,单击“浏览”按钮,在弹出的对话框中选择“受信任的根证书颁发机构”,单击“确定”按钮。单击“下一步”按钮,会弹出一个警告对话框,单击“是”按钮完成证书安装。
无论是Windows还是Mac OS系统,完成了证书的安装以后,剩下的操作就一致了。
安装好证书以后,选择菜单栏中的“Proxy”-“SSL Proxying Settings”命令打开SSL代理设置对话框,在SSL代理设置对话框,单击“Add”按钮,在“Host”输入框中输入星号,在“Port”输入框中输入443,设置好证书和SSL代理以后;再回到浏览器刷新网页,就可以看到Charles成功截获到了数据包。
六、App爬虫和小程序爬虫
使用Charles,可以轻松截获手机App和微信小程序的数据包,从而开发出直接抓取App后台和小程序后台的爬虫。为了实现使用Charles抓取手机的数据包,就需要先把证书安装到手机上。
6.1 iOS系统的配置和使用
对于苹果设备,首先要保证计算机和苹果设备联在同一个Wi-Fi上。选择Charles菜单栏中的“Help”-“Local IP Address”命令,此时弹出一个对话框,显示当前计算机的内网IP地址。接下来设置手机。进入系统设置,选择“无线局域网”,然后单击已经连接的这个Wi-Fi热点右侧的圆圈包围的字母i的图标;选择“HTTP代理”下面的“手动”选项卡,在“服务器”处输入计算机的IP地址,在“端口”处输入8888;输入完成代理以后按下苹果设备的Home键,设置就会自动保存。注意,计算机上立刻就会弹出一个对话框,询问是否允许一台设备通过计算机代理上网;单击“Allow”按钮,允许以后,只能使用iOS系统自带的Safari浏览器访问https://chls.pro/ssl。此时会弹出一个对话框,询问是否显示配置描述文件,单击“允许”按钮。
允许配置描述文件后会自动弹出对话框,单击右上角的“安装”按钮,弹出另一个对话框,显示描述文件信息;安装完成证书以后,在设置中打开“关于本机”,找到最下面的“证书信任设置”,并在里面启动对Charles证书的完全信任。这样,一个证书就在iOS设备上安装好了;安装好证书以后,打开iOS设备上的任何一个App,可以看到Charles中有数据包在流动。
有了Charles,要抓取文章信息,根本不需要先在计算机网页上打开网站,再写XPath。在Charles的帮助下开发一个App后台的爬虫,就像开发一个异步加载的爬虫一样简单,而且结果直接就是JSON,转换成字典以后直接就能存到MongoDB里面,极其方便。
6.2 Android的配置和使用
要实现Charles对Android抓包,其过程比iOS稍微复杂一点。这是因为不同的Andorid设备,安装证书的入口可能不一样,这就需要根据自己手机的实际情况来寻找。
首先在Charles中选择“Help”-“SSL Proxying”-“Save Charles Root Certificate”命令,将Charles的证书保存到计算机桌面。
为了在手机上安装证书,需要先发送证书到手机里面。如果计算机系统为Windows,那么直接插上USB线就可以传送。如果计算机系统是Mac OS,那么可以使用QQ传文件或者微信的文件传输助手把证书文件发送到手机里面。
虽然Android里面安装证书的位置可能不同,但一般都在“系统设置”-“WLAN”里面。打开Wi-Fi功能,有的Android系统,这个界面的左下角或者右下角可能有3个点,点开以后是一个高级设置的菜单。而另一些Android手机的系统,例如小米手机的MIUI系统,则是直接在最下面就可以找到高级设置;选择“高级设置”,打开高级设置界面,继续选择“安装证书”;系统会打开文件浏览器,在里面找到刚才发送到手机上面的证书文件。找到证书并单击“确定”按钮,此时会弹出一个窗口,提示给证书设定一个名字,这个名字可以任意设定。
单击“确定”按钮,证书就安装好了。接下来和iOS一样,需要为手机设置代理,让手机的流量经过Charles。在系统设置中打开当前连接的Wi-Fi设置界面,并将代理设置为Charles对应的IP和端口号。和iOS不同的是,Android设置了代理以后需要单击“确定”按钮。代理设置好以后,Android的环境就搭建好了。在手机上任意打开一个App,就可以看到Charles上面有数据在流动。
6.3 微信小程序爬虫
使用Charles抓取微信小程序的步骤与抓取App几乎没有区别。当使用Charles监控iOS设备或者Android设备的数据包以后,打开微信小程序,小程序的数据包就会自动被Charles抓住。
小程序的请求极其简单,基本上没有验证信息,即便有验证信息也非常脆弱。用Python来请求小程序的后台接口从而获取数据,比请求异步加载网页的后台接口要容易很多。在爬虫开发过程中,如果目标网站有微信小程序,那么一定要优先调查能否通过小程序的接口来抓取数据。小程序的反爬虫能力比网页版的低很多。使用小程序的接口来爬数据,能极大提高爬虫的开发效率。
七、Charles的局限
Charles只能截获HTTP和HTTPS的数据包,如果网站使用的是websocket或者是flashsocket,那么Charles就无能为力。
有一些App会自带证书,使用其他证书都无法正常访问后台接口。在这种情况下,Charles自带的证书就不能正常使用,也就没有办法抓取这种App的数据。
有一些App的数据经过加密,App接收到数据以后在其内部进行解密。对于这种情况,Charles只能抓取到经过加密的数据。如果无法知道数据的具体加密方法,就没有办法解读Charles抓取到的数据。
--------------------------------------
没有自由的秩序和没有秩序的自由,同样具有破坏性。
--------------------------------------
相关文章:
Python3 爬虫 数据抓包
一、数据抓包 所谓抓包(Package Capture),简单来说,就是在网络数据传输的过程中对数据包进行截获、查看、修改或转发的过程。如果把网络上发送与接收的数据包理解为快递包裹,那么在快递运输的过程中查看里面的内容&…...
js强制刷新
在JavaScript中触发强制刷新通常指的是强制浏览器重新加载页面,忽略缓存。以下是几种实现强制刷新的方法: ### 使用 location.reload() 这是最简单的方法,它会重新加载当前页面。 javascript location.reload(true); // 传入true参数表示强制…...
yolov5 part2
two-stage (两阶段):Faster-rcnn Mask-Rcnn系列 one-stage (单阶段):YOLO系列 最核心的优势:速度非常快,适合实时监测任务。但是缺点也有,效果可能不好 速度较慢在2018…...
Hive3:表操作常用语句-内部表、外部表
一、内部表 1、基本介绍 (CREATE TABLE table_name ......) 未被external关键字修饰的即是内部表, 即普通表。 内部表又称管理表,内部表数据存储的位置由hive.metastore.warehouse.dir参数决定(默认:/user/hive/ware…...
【PXE+kickstart】linux网络服务之自动装机
PXE: 简介:PXE(Preboot execute environment 是一种能够让计算机通过网络启动的引导方式,只要网卡支持PXE协议即可使用Kickstart 是一种无人值守的安装方式,工作原理就是预先把原本需要运维人员手工填写的参数保存成一个 ks.cfg 文…...
vmware ubuntu虚拟机网络联网配置
介绍vmware虚拟机配置基础网络环境,同时连接外网(通过桥接模式),以及ubuntu下输入法等基础工具安装。 本文基于ubuntu22.04,前提虚拟机已经完成安装。本文更多是针对vmware虚拟机的设置,之前有一篇针对ubun…...
Vue3_对接声网实时音视频_多人视频会议
目录 一、声网 1.注册账号 2.新建项目 二、实时音视频集成 1.声网CDN集成 2.iframe嵌入html 3.自定义UI集成 4.提高进入房间速度 web项目需要实现一个多人会议,对接的声网的灵动课堂。在这里说一下对接流程。 一、声网 声网成立于2014年,是全球…...
慧灵科技:创新引领自动化未来
在智能制造与自动化生产日益成为主流趋势的今天,慧灵科技凭借其卓越的技术创新能力和产品优势,在机器人领域崭露头角。 自2015年在深圳成立以来,慧灵科技专注于核心技术的研发与产品创新,为各行业提供性价比极高的机器人产品及自…...
【TiDB 社区智慧合集】TiDB 在核心场景的实战应用
作者: 社区小助手 原文来源: https://tidb.net/blog/5cc4ec70 杭州银行 杭州银行采用 TiDB 作为其核心系统数据库,标志着银行资产规模和业务复杂性的大幅增长。通过"分布式透明化"的思考,杭州银行实现了从传统 Orac…...
JetBrains:XML tag has empty body警告
在xml文件中配置时,因为标签内容为空,出现黄色警告影响观感。 通过IDE配置关闭告警...
XMLDecoder反序列化
XMLDecoder反序列化 基础知识 就简单讲讲吧,就是为了解析xml内容的 一般我们的xml都是标签属性这样的写法 比如person对象以xml的形式存储在文件中 在decode反序列化方法后,控制台成功打印出反序列化的对象。 就是可以根据我们的标签识别是什么成分…...
C# 高级数据处理:深入解析数据分区 Join 与 GroupJoin 操作的应用与实例演示
文章目录 一、概述二. 数据分区 (Partitioning)三、Join 操作符1. Join 操作符的基本用法2. Join 操作符示例 四、GroupJoin 操作符1. GroupJoin 操作符的基本用法2. GroupJoin 操作符示例 总结 在数据处理中,联接(Join)操作是一种非常常见的…...
数据库典型例题2-ER图转换关系模型
1.question solution: 2.做题步骤 一些解释: <1弱实体把强属性的主键写进去,指向强属性。eg:E6_A13指向E5_A13 <21:1,1:n,m:n:将完全参与的一方(双线)指向另一方,并将对方的…...
Java:设计模式(单例,工厂,代理,命令,桥接,观察者)
模式是一条由三部分组成的通用规则:它代表了一个特定环境、一类问题和一个解决方案之间的关系。每一个模式描述了一个不断重复发生的问题,以及该问题解决方案的核心设计。 软件领域的设计模式定义:设计模式是对处于特定环境下,经常…...
【算法】KMP算法
应用场景 有一个字符串 str1 "BBA ABCA ABCDAB ABCDABD",和一个子串 str2 "ABCDABD"现在要判断 str1 是否含有 str2,如果含有,就返回第一次出现的位置,如果不含有,则返回 -1 我们很容易想到暴力…...
nginx续1:
八、虚拟主机配置 基于域名的虚拟主机 [rootserver2 ~]# ps -au|grep nginx //查看进程 修改Nginx服务配置,添加相关虚拟主机配置如下 1. [rootproxy ~]# vim /usr/local/nginx/conf/nginx.conf 2. .. .. 3. server { 4. listen …...
循环队列和阻塞有什么关系?和生产者消费者模型又有什么关系?阻塞队列和异步日志又有什么关系
### 循环队列和阻塞队列 #### 循环队列 - **定义**: 一个固定大小的数组,通过两个指针(front 和 back)管理队列的头部和尾部元素。 - **特点**: - **循环性**: 当指针到达数组的末尾时,可以回绕到数组的开头,从而利…...
物理笔记-八年级上册
0.梦开始的地方 物理研究什么? 电学,力学,声学,光学,热学。 1.1.1长度的单位 国际基本单位制 单位转换 魔法记忆:千米-米-毫米-微米-纳米(进率都是1000) 单位换算计算方法 用科学…...
QT键盘和鼠标事件
这些事件都在QWidget 中的保护成员方法中 都是虚函数在头文件中声明了 需要类外重现实现 如果头文件中声明 类外无实现就会报错 void Widget::keyPressEvent(QKeyEvent *event) {switch (event->key()) {//获取按键case Qt::Key_W://按键wqDebug()<<"按下w"…...
文件Io编程基础
1. 标准I/O (stdio.h) stdio.h 是标准C库的头文件,包含了输入输出函数的声明。位置:/usr/include/stdio.h 2. 文件I/O操作步骤 打开文件: 使用 fopen 函数,返回 FILE* 指针。读/写操作: 使用 fread、fwrite、fgets、fputs、fprintf、fscan…...
Unity-MCP协议:可嵌入、可协商的AI上下文通信标准
1. 这不是又一个“AI插件”,而是Unity开发工作流的底层重定义你有没有过这样的时刻:在Unity里反复调整Animator Controller的过渡条件,只为让角色转身动画不穿模;写完一段NavMesh寻路逻辑,却要花两小时调试Agent卡在斜…...
Unity安卓构建实战指南:解决APK真机安装闪退与构建失败
1. 这不是一本“从零开始”的书,而是一份你真正上手Unity安卓游戏开发前必须撕开的说明书我带过三届Unity实习工程师,也帮二十多个独立开发者把Demo打包进Google Play。每次看到新人在“安卓构建失败”报错里反复挣扎,或者对着“IL2CPP编译卡…...
极致精简,功能强大的PDF编辑工具
这是一款功能全面的PDF编辑工具 你只需要导入一份PDF格式文件 就可以快速的对它进行插入 批注编辑保护转换等各种操作 而且无需登录 也可以直接使用 在插入选项中可以进行插入文字图片 页面页眉页脚页码文档背景水印视频音频等 在批注选项中可以管理批注隐藏批注 高亮显示 文本…...
ARM架构CONSTRAINED UNPREDICTABLE行为解析与应对
1. ARM架构中的CONSTRAINED UNPREDICTABLE行为解析在处理器架构设计中,UNPREDICTABLE行为通常指架构规范未明确定义的执行结果,可能导致不可预期的系统状态。ARM架构通过引入CONSTRAINED UNPREDICTABLE机制,将这类行为限制在特定范围内&#…...
Transient、QuickEye、VerifyEye傻傻分不清?一文讲透Ansys里三种眼图仿真方法的适用场景与避坑指南
Transient、QuickEye、VerifyEye深度解析:Ansys眼图仿真技术选型实战指南 在高速数字系统设计中,眼图分析是评估信号完整性的黄金标准。面对Ansys工具链中三种截然不同的眼图生成方法,工程师常常陷入选择困境——是追求精确度的传统瞬态分析&…...
WPF虚拟桌宠组件:可嵌入、高性能、工程化UI生命体
1. 这不是“桌面宠物”,而是一个可嵌入的WPF UI组件化生命体你可能在Windows XP时代见过那只晃着尾巴、偶尔打哈欠的3D小猫,也可能在Win10系统托盘里点开过一个会眨眼的像素狐狸——但那些是独立进程、是系统级小工具、是“看一眼就关掉”的轻量娱乐。而…...
终极指南:5步快速掌握免费的3D点云标注工具labelCloud
终极指南:5步快速掌握免费的3D点云标注工具labelCloud 【免费下载链接】labelCloud A lightweight tool for labeling 3D bounding boxes in point clouds. 项目地址: https://gitcode.com/gh_mirrors/la/labelCloud 想要为自动驾驶、机器人视觉或3D目标检测…...
告别SVN恐惧症:美术策划也能轻松上手的Unity PlasticSCM极简入门(附团队项目拉取实战)
告别SVN恐惧症:美术策划也能轻松上手的Unity PlasticSCM极简入门(附团队项目拉取实战) 在游戏开发团队中,版本控制系统是协作的基石,但传统工具如SVN往往让非技术成员望而生畏。当美术资源频繁更新、策划案不断迭代时&…...
【审计专栏】【财务领域】 第四十九篇 人在企业中的核心资产和核心利益01
编号 类型 企业 (行业/企业产品/企业利益链/生态位与层级) 业务领域 企业性质 企业中人的角色/岗位/利益矩阵 人在企业中的核心资产/附属资产 资产的业务-财务数学模型及数字/数值 关联知识 1 核心经营性资产(如IP、数据、品牌) 行业:人工智能 产品:工业视觉检…...
JS中forEach与普通for
for就不用说了,最普通的循环函数forEach1. 只写 1 个参数只接收当前遍历元素let arr [10,20,30] arr.forEach(item > {console.log(item) // 依次 10、20、30 })2. 写 2 个参数依次接收元素值、下标索引let arr [10,20,30] arr.forEach((item, index) > {co…...
