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 相关文章推荐
python解析模块(ConfigParser)使用方法
Dec 10 Python
Python Queue模块详解
Nov 30 Python
Python中的各种装饰器详解
Apr 11 Python
python实现提取百度搜索结果的方法
May 19 Python
Python内置函数reversed()用法分析
Mar 20 Python
python3个性签名设计实现代码
Jun 19 Python
Flask框架URL管理操作示例【基于@app.route】
Jul 23 Python
Pandas Shift函数的基础入门学习笔记
Nov 16 Python
python列表插入append(), extend(), insert()用法详解
Sep 14 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
Python求两个字符串最长公共子序列代码实例
Mar 05 Python
matplotlib图例legend语法及设置的方法
Jul 28 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
数据库中排序的对比及使用条件详解
2012/02/23 PHP
Linux环境下搭建php开发环境的操作步骤
2013/06/17 PHP
Nginx下ThinkPHP5的配置方法详解
2017/08/01 PHP
jQuery Div中加载其他页面的实现代码
2009/02/27 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
js关于精确计算和数值格式化以及直接引js文件
2014/01/28 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
基于html5和nodejs相结合实现websocket即使通讯
2015/11/19 NodeJs
angularjs ocLazyLoad分步加载js文件实例
2017/01/17 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
使用jQuery卸载全部事件的思路详解
2017/04/03 jQuery
JavaScript实现图片切换效果
2017/08/12 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
2017/10/21 Javascript
js实现动态添加上传文件页面
2018/10/22 Javascript
BootstrapValidator实现表单验证功能
2019/11/08 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
javascript中导出与导入实现模块化管理教程
2020/12/03 Javascript
Python学习之asyncore模块用法实例教程
2014/09/29 Python
python对list中的每个元素进行某种操作的方法
2018/06/29 Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
2019/05/13 Python
python 中的命名空间,你真的了解吗?
2020/08/19 Python
PyTorch中Tensor的数据类型和运算的使用
2020/09/03 Python
英国最大的宠物食品和宠物用品网上零售商: Zooplus
2016/08/01 全球购物
科颜氏加拿大官方网站: Kiehl’s加拿大
2016/08/16 全球购物
美国精品家居用品网站:US-Mattress
2016/08/24 全球购物
Java语言程序设计测试题选择题部分
2014/04/03 面试题
《山谷中的谜底》教学反思
2014/04/26 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
2014年教师学期工作总结
2014/11/08 职场文书
考研英语复习计划
2015/01/19 职场文书
房产公证书格式
2015/01/26 职场文书
员工规章制度范本
2015/08/07 职场文书
五年级作文之想象作文
2019/10/30 职场文书
浅谈MySQL 亿级数据分页的优化
2021/06/15 MySQL
【海涛教你打DOTA】死灵飞龙第一视角解说
2022/04/01 DOTA
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫