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升级提示Tkinter模块找不到的解决方法
Aug 22 Python
使用C语言来扩展Python程序和Zope服务器的教程
Apr 14 Python
用Python抢过年的火车票附源码
Dec 07 Python
Python实现读写INI配置文件的方法示例
Jun 09 Python
对Python 数组的切片操作详解
Jul 02 Python
对python中的iter()函数与next()函数详解
Oct 18 Python
Python numpy.array()生成相同元素数组的示例
Nov 12 Python
pygame游戏之旅 python和pygame安装教程
Nov 20 Python
用python3 urllib破解有道翻译反爬虫机制详解
Aug 14 Python
Django学习之文件上传与下载
Oct 06 Python
详解python itertools功能
Feb 07 Python
python 远程执行命令的详细代码
Feb 15 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
PHPMailer安装方法及简单实例
2008/11/25 PHP
PHP迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
php通过各种函数判断0和空
2020/07/04 PHP
YII框架模块化处理操作示例
2019/04/26 PHP
laravel dingo API返回自定义错误信息的实例
2019/09/29 PHP
精选的10款用于构建良好易用性网站的jQuery插件
2011/01/23 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
2016/01/12 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
d3.js实现自定义多y轴折线图的示例代码
2018/05/30 Javascript
JavaScript的词法结构精华篇
2018/10/17 Javascript
js实现简单模态框实例
2018/11/16 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
Python设计模式之模板方法模式实例详解
2019/01/17 Python
python实现K近邻回归,采用等权重和不等权重的方法
2019/01/23 Python
Python3 chardet模块查看编码格式的例子
2019/08/14 Python
Python三元运算与lambda表达式实例解析
2019/11/30 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
Python使用多进程运行含有任意个参数的函数
2020/05/02 Python
为什么是 Python -m
2020/06/19 Python
Python request post上传文件常见要点
2020/11/20 Python
印度在线杂货店:bigbasket
2018/08/23 全球购物
UDP协议功能
2013/01/06 面试题
入党申请书自我鉴定
2013/10/12 职场文书
有关爱国演讲稿
2014/05/07 职场文书
小学生美德少年事迹材料
2014/08/24 职场文书
县政府办公室领导班子个人对照检查材料
2014/09/16 职场文书
水利局群众路线专题民主生活会发言材料
2014/09/21 职场文书
地方课程教学计划
2015/01/19 职场文书
施工现场安全管理制度
2015/08/05 职场文书
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
2021/04/06 Python