Python爬取微信小程序Charles实现过程图解


Posted in Python onSeptember 29, 2020

一、前言

最近需要获取微信小程序上的数据进行分析处理,第一时间想到的方式就是采用python爬虫爬取数据,尝试后发现诸多问题,比如无法获取目标网址、解析网址中存在指定参数的不确定性、加密问题等等,经过一番尝试,终于使用 Charles 抓取到指定微信小程序中的数据,本文进行记录并总结。

环境配置:

电脑:Windows10,连接有线网

手机:iPhone Xr,连接无线网

注:有线网与无线网最好位于同一网段下。

本文有线网网址:192.168.131.24,无线网网址:192.168.210.223

二、Charles配置与使用 1.Charles简介

Charles,一个HTTP代理服务器,HTTP监视器,反转代理服务器,当程序连接Charles的代理访问互联网时,Charles可以监控这个程序发送和接收的所有数据。它允许一个开发者查看所有连接互联网的HTTP通信,这些包括request, response和HTTP headers (包含cookies与caching信息)。

Charles主要功能:

1. 支持SSL代理。可以截取分析SSL的请求。

2. 支持流量控制。可以模拟慢速网络以及等待时间(latency)较长的请求。

3. 支持AJAX调试。可以自动将json或xml数据格式化,方便查看。

4. 支持AMF调试。可以将Flash Remoting 或 Flex Remoting信息格式化,方便查看。

5. 支持重发网络请求,方便后端调试。

6. 支持修改网络请求参数。

7. 支持网络请求的截获并动态修改。

8. 检查HTML,CSS和RSS内容是否符合W3C标准。

----百度百科

Charles,著名的抓包工具,可以抓取移动端与pc端网络访问的所有数据,操作简单,试用期后每30分钟需要重启一次,且启动有10秒延迟,较麻烦。

Python爬取微信小程序Charles实现过程图解

2.Charles安装

Charles官网下载:https://www.charlesproxy.com/download/ 

Python爬取微信小程序Charles实现过程图解

下载对应版本后完成安装。

3.证书配置(重要!) Charles安装证书:

Help -> SSL Proxying -> Install Charles Root Certificate

Python爬取微信小程序Charles实现过程图解

在Windows端需要安装Charles证书,点击后如图所示(此为安装成功后截图):

Python爬取微信小程序Charles实现过程图解

点击安装证书,

Python爬取微信小程序Charles实现过程图解

点击下一步,

Python爬取微信小程序Charles实现过程图解

在此选择第二个,将所有证书都放入下列存储,点击浏览,选择受信任的根证书颁发机构。

Python爬取微信小程序Charles实现过程图解

确定后下一步。

Python爬取微信小程序Charles实现过程图解

点击完成后提示导入成功。此时需要重新进入Help -> SSL Proxying -> Install Charles Root Certificate,查看证书结果,成功时如下提示:

Python爬取微信小程序Charles实现过程图解

 移动端安装证书(重要!)

移动端同样也需要安装Charles证书,具体操作如下:

Python爬取微信小程序Charles实现过程图解

 选择在移动端安装证书选项,Charles提示如下:

Python爬取微信小程序Charles实现过程图解

提示需要设置手机http代理为192.168.131.24,端口为8888,然后在手机浏览器上访问 chls.pro/ssl 下载安装证书。如果IOS 版本在10以上,必须在设置->通用->关于本机->证书信任设置中打开对根证书启用完全信任。

接下来逐一操作如下:

1. 手机上打开无线局域网链接,选择链接的无线网信息页如下:

        Python爬取微信小程序Charles实现过程图解

2. 在http代理中选择手动,添加Charles提示的http代理:192.168.1324,端口为8888,选择存储。

         Python爬取微信小程序Charles实现过程图解

3. 手机上设置->通用->关于本机->证书信任设置,打开右边按钮,开启完全信任。

         Python爬取微信小程序Charles实现过程图解

注:手机设置完成后若无法上网,极有可能是ios版本过高并没有开启对证书的 完全信任、完全信任、完全信任 导致!!!

手机正确连接后,Charles会弹框类似如下,说明连接成功。(图中IP地址为另一个测试机)

Python爬取微信小程序Charles实现过程图解

浏览器端配置

谷歌与火狐浏览器默认并不使用系统的代理服务器设置,而 Charles 是通过将自己设置成代理服务器来完成封包截取的,所以在默认情况下无法截取 Chrome 和 Firefox 浏览器的网络通讯内容。如果你需要截取的话,在 Chrome 中设置成使用系统的代理服务器设置即可,或者直接将代理服务器设置成 127.0.0.1:8888 也可达到相同效果。

至此,证书的相关三点设置完毕。

4.Charles配置 取消Windows代理

由于此次目标是抓取移动端微信小程序中的数据,取消此选项是尽量减少无关的数据量。

Python爬取微信小程序Charles实现过程图解

查看本机IP地址与配置相关端口号

默认端口号是8888,可以修改。

Help -> Local ip Address :

Python爬取微信小程序Charles实现过程图解

 Proxy -> Proxy Settings :

Python爬取微信小程序Charles实现过程图解

ssl代理设置

安装完成ssl证书后,需要在Charles中开启ssl代理设置,在Proxy->SSL Proxying Settings中,勾选Enable SSL Proxying,

Python爬取微信小程序Charles实现过程图解

点击add,新增访问的目标地址,根据提示,空的host与port匹配所有的值,可以使用*与?进行匹配,此处host与port均填写*。

Python爬取微信小程序Charles实现过程图解

至此,Charles相关的配置完毕。

三、Charles数据抓取

手机与Charles均配置成功后,打开微信小程序,此时Charles会自动获取http与https访问,如下:

Python爬取微信小程序Charles实现过程图解

点击左边解析的链接,选择Contents,JSON Text,可以看到解析出来的微信小程序数据内容。

在Overview中,可以看到访问的url地址为:

https://nujump.tigerobo.com/HB_Jumper/ztjump.ashx?topic=8&aris_data=kcb_1_announced_corp&pageIndex=1&pageSize=5,

主要参数为pageIndex与pageSize,即页面索引与当页显示的数据量,在浏览器中访问该url,可以看到返回的结果为json格式的数据:

Python爬取微信小程序Charles实现过程图解

其实,当通过Charles解析出url链接时,即可通过python爬虫爬取接口返回的数据了,不涉及反爬虫等问题,非常方便。

四、问题集锦

1.网络问题:

网传手机与电脑链接的网段必须相同,但是也有不一致的说法,本文测试时,无线网与有线网是处在同一网段下。

2. 手机或电脑无法联网:

证书问题:证书未能正确安装,查看手机上是否始终信任证书!(多数情况下如此);电脑上查看证书是否安装在受信任的位置,浏览器中的证书是否正确添加。

防火墙问题:关闭Windows10的防火墙,取消阻止传入连接。

Python爬取微信小程序Charles实现过程图解

其他问题:网传Charles开启了White list,但测试时并未发现。

3.https加密的链接显示unknow

此问题遇到的可能性最大,导致的原因很多,

最有可能的原因在于证书的问题,证书未能正确安装,查看手机上是否始终信任证书!!(多数情况下如此,注意iOS版本问题,过高需要始终信任此证书);电脑上查看证书是否安装在受信任的位置。

五、补充

目前来说,采用Charles抓取移动端微信小程序数据应该是比较容易的,就是配置过程与安装证书较为繁琐。

除此之外,网传另外一种方式,使用TBS爬取微信小程序,本人尝试后始终未能正确爬取数据,如哪位大神操作正确,抓取数据顺利,还望告知,不胜感激!

TBS爬取微信小程序参考连接如下:

https://my.oschina.net/sumiao/blog/1587350?utm_source=debugrun&utm_medium=referral

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
详解python多线程、锁、event事件机制的简单使用
Apr 27 Python
使用EduBlock轻松学习Python编程
Oct 08 Python
Python常见数字运算操作实例小结
Mar 22 Python
python 计算平均平方误差(MSE)的实例
Jun 29 Python
详解numpy矩阵的创建与数据类型
Oct 18 Python
Python IDE环境之 新版Pycharm安装详细教程
Mar 05 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
Jul 27 Python
python中turtle库的简单使用教程
Nov 11 Python
python中的unittest框架实例详解
Feb 05 Python
python cv2图像质量压缩的算法示例
Jun 04 Python
Pytest中skip和skipif的具体使用方法
Jun 30 Python
Python Charles抓包配置实现流程图解
Sep 29 #Python
python和node.js生成当前时间戳的示例
Sep 29 #Python
python实现图书馆抢座(自动预约)功能的示例代码
Sep 29 #Python
Python 下载Bing壁纸的示例
Sep 29 #Python
pycharm 2020 1.1的安装流程
Sep 29 #Python
利用django创建一个简易的博客网站的示例
Sep 29 #Python
如何基于Python实现word文档重新排版
Sep 29 #Python
You might like
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
PHP中类的自动加载的方法
2017/03/17 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
2017/03/31 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
js 立即调用的函数表达式如何写
2014/01/12 Javascript
深入探究使JavaScript动画流畅的一些方法
2015/06/30 Javascript
基于javascript的Form表单验证
2016/12/29 Javascript
mui上拉加载功能实例详解
2017/04/13 Javascript
javascript 日期相减-在线教程(附代码)
2017/08/17 Javascript
js判断在哪个浏览器打开项目的方法
2020/01/21 Javascript
[03:38]2014DOTA2西雅图国际邀请赛 VG战队巡礼
2014/07/07 DOTA
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
Python中selenium实现文件上传所有方法整理总结
2017/04/01 Python
python3+PyQt5使用数据库窗口视图
2018/04/24 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
2018/12/29 Python
TensorFlow索引与切片的实现方法
2019/11/20 Python
Mac中PyCharm配置Anaconda环境的方法
2020/03/04 Python
使用Pycharm分段执行代码
2020/04/15 Python
TensorFLow 数学运算的示例代码
2020/04/21 Python
通过代码实例了解Python异常本质
2020/09/16 Python
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
体育纪念品、亲笔签名的体育收藏品:Steiner Sports
2020/07/31 全球购物
Java的五个基础面试题
2016/02/26 面试题
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
家长对孩子评语
2014/01/30 职场文书
数控技术学生的自我评价
2014/02/15 职场文书
中学生学雷锋活动心得体会
2014/03/10 职场文书
交通事故调解协议书
2014/04/16 职场文书
关于美容院的活动方案
2014/08/14 职场文书
涉外离婚协议书怎么写
2014/11/20 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
2015医德医风个人工作总结
2015/04/02 职场文书
MySQL慢查询优化解决问题
2022/03/17 MySQL
MySQL实现字段分割一行转多行的示例代码
2022/07/07 MySQL