目录
原理
难点
- 可用接口
对于网站类目标 可以通过网址抓取
对于应用类目标 需要通过接口抓取 => 理清URL以及参数等
- 突破鉴权
如果基于Cookie 可以登录后获得Cookie
如果基于Token 需要通过复用现有Token => 借助代理工具复现
- 验证限流
不基于账号限流 可以通过代理池 => 代理会变换不同IP
基于账号的限流 需要通过多个账号以及限额较高接口
思路
image.png搜狗微信接口简单 但是有如下问题
1 搜索结果基于关键词 而不能基于公众号
2 不登录只能查看前10页搜索结果 登录后干扰结果多且有验证码校验
典型的开源实现有chyroc/WechatSogou
- 公众号后台
公众号后台接口可用 但是有如下问题
1 基于账号的限流
2 限额较低 每日只能抓取<10个公众号
典型的开源实现有利用新接口抓取微信公众号的所有文章
- 微信代理
微信客户端文章列表接口 但是有如下问题
1 复杂性更高 需要代理开发、微信客户端
2 基于账号的限流 但是限额相对较高且易于多微信客户端并行抓取
典型的开源实现有striver-ing/wechat-spider
实现
image.png经过验证 微信代理方案抓取效果最好 可基于文章列表接口实现抓取 架构如下
- biz
它是公众号在微信平台的唯一标识
也是文章列表接口中最重要的参数
biz可以通过搜狗微信公众号页面源代码、公众号后台查询接口获得
- mitmproxy
brew install mitmproxy
mitmproxy => 终端交互的代理工具
mitmdump => 命令行的代理工具
mitmweb => mitmproxy的Web界面
- Elasticsearch
搜索引擎 实现全文关键词快速检索
- 任务管理
修改请求参数并再次发起请求 主要修改请求的offset参数
再次发起请求 通过在微信页面注入setTimeout()实现调用
实战
代理
git clone https://e.coding.net/yl33643/python-tutorial.git
cd python-tutorial/wechat-spider
cp app.config.example app.config
pipenv install
pipenv run python app.py
# Proxy server listening at http://*:8080
微信
- 电脑微信
这里以macOS系统为例
- 安装证书
双击 ~/.mitmproxy/mitmproxy-ca-cert.pem
配置 mitmproxy证书为 始终信任
- 设置代理
系统配置 => 网络 => 高级 => 代理
Web Proxy (HTTP) => 服务IP:8080
Secure Web Proxy (HTTPS) => 服务IP:8080
- 手机微信
手机和代理必须处于同一网络
- 设置代理
连接WiFi => 设置代理 => 服务IP:8080
- 安装证书
手机浏览器访问 'http://mitm.it' => 安装相应系统证书
iOS必须信任证书 设置->通用->关于本机->证书信任设置
抓取
先关注目标公众号 然后再访问"历史消息" 才能触发
微信 => 通讯录 => 公众号 =>
关注"中铁二局" => 往期回顾 (即"历史消息")
经验
以下经验基于 微信文章列表接口
-
单个微信 接口日限流大约是200次
-
单个公众号 约150篇文章 接口每次获得15篇 抓取一个公众号需调用接口10次
-
单个微信 日抓取公众号20个 共计3000篇文章
网友评论