美文网首页
微信爬虫实战

微信爬虫实战

作者: 诺之林 | 来源:发表于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