美文网首页
微信爬虫实战

微信爬虫实战

作者: 诺之林 | 来源:发表于2020-02-20 16:13 被阅读0次

目录

原理

难点

  • 可用接口
对于网站类目标 可以通过网址抓取

对于应用类目标 需要通过接口抓取 => 理清URL以及参数等
  • 突破鉴权
如果基于Cookie 可以登录后获得Cookie

如果基于Token 需要通过复用现有Token => 借助代理工具复现
  • 验证限流
不基于账号限流 可以通过代理池 => 代理会变换不同IP

基于账号的限流 需要通过多个账号以及限额较高接口

思路

image.png
搜狗微信接口简单 但是有如下问题

1 搜索结果基于关键词 而不能基于公众号

2 不登录只能查看前10页搜索结果 登录后干扰结果多且有验证码校验

典型的开源实现有chyroc/WechatSogou

  • 公众号后台
image.png
公众号后台接口可用 但是有如下问题

1 基于账号的限流

2 限额较低 每日只能抓取<10个公众号

典型的开源实现有利用新接口抓取微信公众号的所有文章

  • 微信代理
微信客户端文章列表接口  但是有如下问题

1 复杂性更高 需要代理开发、微信客户端

2 基于账号的限流 但是限额相对较高且易于多微信客户端并行抓取

典型的开源实现有striver-ing/wechat-spider

实现

经过验证 微信代理方案抓取效果最好 可基于文章列表接口实现抓取 架构如下

image.png
  • biz
它是公众号在微信平台的唯一标识

也是文章列表接口中最重要的参数

biz可以通过搜狗微信公众号页面源代码、公众号后台查询接口获得

  • mitmproxy

mitmproxy是一款开源免费且可编程的HTTPS代理 可选方案还有AnyProxy

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篇文章

参考

相关文章

网友评论

      本文标题:微信爬虫实战

      本文链接:https://www.haomeiwen.com/subject/ihoofhtx.html