Python爬取微信小程序(Charles)

一、前言

最近需要获取微信小程序上的数据进行分析处理,第一时间想到的方式就是采用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秒延迟,较麻烦。

2.Charles安装

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

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

3.证书配置(重要!)

Charles安装证书:

Help -> SSL Proxying -> Install Charles Root Certificate

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

点击安装证书,

点击下一步,

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

确定后下一步。

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

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

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

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

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

接下来逐一操作如下:

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

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

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

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

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

浏览器端配置

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

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

4.Charles配置

取消Windows代理

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

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

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

Help -> Local ip Address :

Proxy -> Proxy Settings :

ssl代理设置

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

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

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

三、Charles数据抓取

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

点击左边解析的链接,选择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格式的数据:

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

四、问题集锦

1.网络问题:

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

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

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

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

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

参考:https://www.jianshu.com/p/f80a83a4bc5d

3.https加密的链接显示unknow

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

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

参考:https://segmentfault.com/q/1010000009188854

五、参考链接

https://www.jianshu.com/p/993bc794138d

https://blog.csdn.net/ManyPeng/article/details/79475870

六、补充

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

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

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

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

Python爬取微信小程序(Charles)的更多相关文章

  1. python爬取微信小程序(实战篇)

    python爬取微信小程序(实战篇) 本文链接:https://blog.csdn.net/HeyShHeyou/article/details/90452656 展开 一.背景介绍 近期有需求需要抓 ...

  2. scrapy爬取微信小程序社区教程(crawlspider)

    爬取的目标网站是: http://www.wxapp-union.com/portal.php?mod=list&catid=2&page=1 目的是爬取每一个教程的标题,作者,时间和 ...

  3. scarpy crawl 爬取微信小程序文章(将数据通过异步的方式保存的数据库中)

    import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider ...

  4. scarpy crawl 爬取微信小程序文章

    import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider ...

  5. python 爬取微信好友列表和个性签名,绘制个性签名云图

    python爬取微信好友列表和个性签名,绘制个性签名云图 1. 简要介绍 本次实验主要用到下面几个库 : 1)itchat---用于微信接口,实现生成QR码,用于微信扫描登陆 2)re(正则化)--- ...

  6. Python flask构建微信小程序订餐系统

    第1章 <Python Flask构建微信小程序订餐系统>课程简介 本章内容会带领大家通览整体架构,功能模块,及学习建议.让大家在一个清晰的开发思路下,进行后续的学习.同时领着大家登陆ht ...

  7. Python flask构建微信小程序订餐系统☝☝☝

    Python flask构建微信小程序订餐系统☝☝☝ 一.Flask MVC框架结构 1.1实际项目结构 1.2application.py  项目配置文件 Flask之flask-script模块使 ...

  8. Python flask构建微信小程序订餐系统✍✍✍

    Python flask构建微信小程序订餐系统  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题, ...

  9. Python爬取微信好友

    前言 今天看到一篇好玩的文章,可以实现微信的内容爬取和聊天机器人的制作,所以尝试着实现一遍,本文记录了实现过程和一些探索的内容 来源: 痴海 链接: https://mp.weixin.qq.com/ ...

随机推荐

  1. logstash收集springboot日志

    logstash收集springboot日志 maven依赖 <dependency> <groupId>net.logstash.logback</groupId> ...

  2. dalvik浅析三:类加载

    android的安装包是个apk文件,其中包含dex.资源及签名文件.其中dex是包含程序运行的类代码,而android是运行在dalvik(5.0之前)上的.本篇我们就来看下dalvik是如何把de ...

  3. hdu4539 郑厂长系列故事——排兵布阵 + POJ1158 炮兵阵地

    题意:                  郑厂长系列故事--排兵布阵 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/32 ...

  4. Python第四章-字典

    第四章 字典-当索引不好用时 4.0     字典可以理解成是C++里的map,可以映射任何类型.字典这种结构类型称为映射(mapping).   字典是Python中唯一内建的映射类型,字典中的值并 ...

  5. C++基于文件流和armadillo读取mnist

    发现网上大把都是用python读取mnist的,用C++大都是用opencv读取的,但我不怎么用opencv,因此自己摸索了个使用文件流读取mnist的方法,armadillo仅作为储存矩阵的一种方式 ...

  6. [LeetCode每日一题]1143. 最长公共子序列

    [LeetCode每日一题]1143. 最长公共子序列 问题 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度.如果不存在 公共子序列 ,返回 0 . 一个字符串 ...

  7. @RequestParam、@PathVariable、 @RequestBody用法

    Get和Post请求 get方式的请求是没有请求体的.但是get有query string parameter .比如url?name=zhangsan post请求发现了两种请求体.一种是FromD ...

  8. 『政善治』Postman工具 — 7、Postman中保存请求(Collections集合)

    目录 1.创建Collection 2.保存Request请求 3.查看保存的请求 4.Collection下还可以创建文件夹 5.补充:Postman中的变量 6.总结 1.创建Collection ...

  9. Vulnerability: Cross Site Request Forgery (CSRF)

    CSRF跨站请求伪造 这是一种网络攻击方式,也被称为one-click attack或者session riding 攻击原理 CSRF攻击利用网站对于用户网页浏览器的信任,挟持用户当前已登陆的Web ...

  10. linux命令的使用 以及基本docker命令及docker镜像安装

    以linux CentOS-7 64位 系统为例 查看ip  ifconfig 固定ip 输入vim /etc/sysconfig/network-scripts/ifcfg-ens3 其中vim是修 ...