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修改Excel数据的实例代码
Nov 01 Python
实例讲解Python的函数闭包使用中应注意的问题
Jun 20 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
Python简单读取json文件功能示例
Nov 30 Python
python机器学习理论与实战(一)K近邻法
Jan 28 Python
mac 安装python网络请求包requests方法
Jun 13 Python
Python实现的json文件读取及中文乱码显示问题解决方法
Aug 06 Python
Django CBV类的用法详解
Jul 26 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
Aug 05 Python
python的常见矩阵运算(小结)
Aug 07 Python
解决PyCharm无法使用lxml库的问题(图解)
Dec 22 Python
Python实现石头剪刀布游戏
Jan 20 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 定界符 使用技巧
2009/06/14 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
2014/02/13 PHP
PHP函数func_num_args用法实例分析
2015/12/07 PHP
PHP 8新特性简介
2020/08/18 PHP
jquery特效 幻灯片效果示例代码
2013/07/16 Javascript
javascripit实现密码强度检测代码分享
2013/12/12 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
学习JavaScript设计模式(链式调用)
2015/11/26 Javascript
解决JavaScript数字精度丢失问题的方法
2015/12/03 Javascript
js 连续赋值的简单实现
2016/06/13 Javascript
第九篇Bootstrap导航菜单创建步骤详解
2016/06/21 Javascript
jQuery自制提示框tooltip改进版
2016/08/01 Javascript
Bootstrap基本样式学习笔记之表单(3)
2016/12/07 Javascript
详解前端自动化工具gulp自动添加版本号
2016/12/20 Javascript
JS判断键盘是否按的回车键并触发指定按钮点击操作的方法
2017/02/13 Javascript
解决vue router组件状态刷新消失的问题
2018/08/01 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
2019/05/22 Javascript
python解析xml文件实例分享
2013/12/04 Python
Python类属性的延迟计算
2016/10/22 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
2017/04/24 Python
python生成式的send()方法(详解)
2017/05/08 Python
详解python中executemany和序列的使用方法
2017/08/12 Python
Python 调用 zabbix api的方法示例
2019/01/06 Python
Jupyter Notebook的连接密码 token查询方式
2020/04/21 Python
python实现扫雷小游戏
2020/04/24 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
2020/11/17 Python
经典导游欢迎词大全
2014/01/16 职场文书
给面试官的感谢信
2014/02/01 职场文书
网络教育自我鉴定
2014/02/04 职场文书
劳动工资科岗位职责范本
2014/03/02 职场文书
会计专业毕业生自荐书
2014/06/25 职场文书
总经理助理岗位职责
2015/01/31 职场文书
css position fixed 左右双定位的实现代码
2021/04/29 HTML / CSS