最新微信公众号文章自动化稳定采集方案,看这一篇就够了(2020-07-27)

2,153 阅读5分钟

实现功能

  • 从清博根据关键词获取微信公众号信息(biz,昵称,微信号,头像,二维码,简介),单线程跑每天10w+公众号的采集量
  • 更新公众号信息(是否认证,认证信息,账号主体,归属地)
  • 获取某公众号所有文章信息(永久原文链接,点赞数、阅读数、评论量等)
  • 获取公众号文章对应的评论数据
  • 支持多微信客户端分布式同时并发采集
  • 支持某一个微信客户端采集中断超过3分钟后的自动点击恢复以及长时间中断(超过10分钟)后通过发送邮件告警并重启模拟器重新点击恢复自动化采集
  • 每个微信客户端每天稳定采集300个微信公众号数据

微信账号目前具体可获取指标:biz,昵称,微信号,头像,二维码,简介,是否认证,认证信息,账号主体,归属地等。

微信文章目前具体可获取指标(包含但不局限):阅读数、点赞数(在看)、评论内容及评论总数、正文内容、图片、视频地址、是否为原创、原文永久链接等。

实现技术以及工具

  • SpringBoot + mysql + redis :SpringBoot项目作为后端微信采集服务端程序,接收anyproxy拦截获取的微信公众号文章相关数据并解析入库(mysql),redis主要用作消息队列存待爬取的微信公众号的biz信息。
  • Anyproxy :拦截微信客户端访问微信文章或者公众号历史消息列表页,并把拦截的微信服务端的数据通过接口调用的形式转发到微信采集服务端。
  • 安卓模拟器(夜神模拟器)+ 微信客户端:用模拟器代替真机 微信客户端访问微信文章,如果需要爬取大量的微信公众号需要购买微信小号。
  • python+atx框架:用作模拟器采集过程中出现异常后自动点击恢复以及根据微信公众号获取biz的功能。

经过大量长时间测试,目前一个微信客户端每天采集300个公众号的文章数据,保证一直稳定的运行,账号不会被封,如果访问微信公众号的历史消息页过于频繁,会封禁24小时。

目前来说一个比较好的策略:访问文章页面后休眠5秒,访问微信公众号历史消息页面后休眠150秒。

微信号购买渠道qq客服:1653925422 购买的是非实名 60元一个的微信号,购买上号后千万不能添加好友,否则会被微信号会被当成营销号永久封禁,只是用于访问微信公众号文章不会被封。

详细设计

1、首先准备一批待爬取的微信公众号的biz存入redis队列。

数据库设计

两个redis消息队列

1、待爬取的微信公众号biz 队列

wechat_biz_quene list 先进先出队列

2、获取的微信文章详情页url 队列,用于遍历获取的历史文章对应的阅读量,点赞量和评论。

wechat_content_quene list 先进先出队列

2、模拟器中打开微信atx框架模拟点击第一个待跑公众号拼接的历史消息界面,后续的流程以及数据流转逻辑如下图所示

微信文章自动化爬取过程中出现的问题

1、网页无法打开,解决方案,监控当前页面,当出现网页无法打开时,需要自动点击刷新按钮。

2、运行一段时间后,莫名其妙跳转到微信首页而停止,出现频率较高,是影响自动化爬取的主要因素,初步判断是某些文章导致的,但未找到具体的特征。

导致访问必跳转到首页的微信文章:

mp.weixin.qq.com/s?__biz=MzA…

3、anyproxy拦截过程中出现的各种错误,已通过修改anyproxy配置文件解决。

获取历史消息列表:

mp.weixin.qq.com/mp/profile_…

用这个url pattern来获取文章列表,注意f参数是html,就解决了json不好注入js脚本的问题。另外,调整offset可以实现翻页的。

用好anyproxy提高公众号文章采集效率详解

m.php.cn/article/406…

环境搭建

1、Centos7.x搭建anyproxy代理服务器

www.itbkz.com/8484.html

nodejs安装同步请求sync-request包

npm install -g sync-request

替换anyproxy 配置脚本 rule_default.js :

anyproxy配置文件rule_default.js位于resources/rule_default_js目录下

/usr/local/nodejs/lib/node_modules/anyproxy/lib 目录下

重启anyproxy进程:

pm2 restart all

查看anyproxy日志:

pm2 logs anyproxy

打包部署

mvn clean package

运行

cd target && sh stop.sh && sh start.sh

可代为获取相关数据,相关业务也可直接联系,微信号:denley1225