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抓取到的数据。

--------------------------------------

没有自由的秩序和没有秩序的自由,同样具有破坏性。

--------------------------------------


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值