From:http://www.blog2019.net/post/138
原文地址
相关阅读:
一套价值十万的微信公众号采集解决方案(免费送)
数据采集采集架构中各模块详细分析
基于大数据平台的互联网数据采集平台基本架构
教你一种1分钟下载1万个网页的方法,你学吗?
uvloop:一个比gevent还要快两倍的 Python 异步网络框架
数据采集中,如何建立一套行之有效的监控体系?
3人团队,如何管理10万采集网站?(最全、最细解读)
爬虫系列之基于XPosed框架的微信公众号采集
1 整体概述
1.1 编写目的
本文主要用于描述微信采集过程中,各流程节点的解决方案。详细介绍了采集架构、手机号购买注意事项、微信注册注意事项、微信号养号注意事项、公众号采集方式,以及采集过程中遇到的问题等。
1.2 整体架构
微信数据采集主要分为四个阶段:
- 一、采集准备阶段:手机、手机号、XPosed插件、手机支架、HUB集线器、智能插座等;
- 二、公众号处理阶段:公众号收集、公众号添加、公众号管理等;
- 三、文章采集阶段:文章链接URL获取、解析、正文分布式采集等;
- 四、数据存储阶段:文章URL数据、文章正文数据等。
大致框架如下图1-1所示:
2 资源准备
微信采集主要需要手机和手机号,但由于需要大批量采集,手机的统一管理尤为重要。所以,同时需要手机支架、HUB集线器及智能插座等辅助设备,同时需要一个6.5~7.8平方米的空间。下面是对各个设备的配置等作以详细的说明。
2.1 手机购买
由于使用XPosed插件进行采集,所以对手机本身本身硬件要求较高,为了保证采集正常,手机不出现卡死、假死等现象,需要手机内存最低2G,操作系统版本要求为 Android 5.X及以上版本。同时,为了降低充电的次数,减少电池损耗,尽量选择待机长的机型。综合以上几个因素,手机每台费用在400-600元之间。
注意事项:
最好购买有“永不锁屏”设置的手机,因为在锁屏状态下无法接收到微信公众号自动推送的信息。
2.2 号码购买
手机号购买注意事项:
- 1. 一定要用4G网络,最好用电信号的。
- 2. 注册手机号不能连号,相邻手机号码之差的绝对值至少大于2000,可相同号段号码不同时间注册降低封号风险。
- 3. 号码需要不同号段(号码前3位和前7位随机获取),比如:不能全是153的号码,需要153、152、154的都有,前7位举例:1531002***、1531003***,不能全是1531001***的号码
- 4. 手机号码,不要选 170、 171、149这个些虚拟号段,选传统号段 130、137这些,手机号码最好不要挨着,如果挨着,也没关系。
- 5. 不要在市面上去买什么免实名卡,0 月租卡,大部分是骗子或者无法长期使用。
- 6. 建议买实名电话卡,一个身份证在一家电信业者可办理5卡。
注意事项:
也可以直接购买流量卡。但是如果微信异常或封号,解封没有手机号就比较麻烦了。
2.3 手机支架
由于微信采集需要使用大量的手机,且手机需要长时间处于非锁屏状态,需要长时间充电、散热、封号处理等。所以,手机的统一管理就显得尤为重要。如下图2-1所示(费用782元左右),需要特定的支架,用于安放手机,方便手机的管理、充电、微信号异常(封号)处理等。
2.4 HUB集线器
由于整体采集使用的手机较多,每个手机通过独立的插座转接头的方式进行充电、USB链接等比较麻烦,不易于管理。所以,需要使用HUB集线器进行统一管理,如下图2-2、2-3所示,目前,市场上20个USB口的HUB大概在250-400元;30至32个USB口的HUB在400~550元
2.5 智能插座
由于采集使用的手机较低端,硬件质量较差,电池使用时间过长或者长期充电,容易导致手机电池鼓包,存在较大的安全隐患。所以,使用智能插座可以在每周的固定时间,统一给手机充电N小时,然后自动断电,依次循环往复。如下图2-3所示。其中智能插座的费用大概在:50~150元之间。
2.6 人员需求
需要一名运维人员(可为实习生)专门负责采集监控、手机监控、微信号监控、微信号解封等。
3 公众号采集
3.1 监测范围
根据目前了解到的市面上微信采集情况,一个比较完善微信采集平台,每天需要处理的大概任务量如下所示:
- ① 每天活跃的公众号数:45-50万/天
- ② 每天的文章总量:90-110万篇/天
- ③ 每天的点赞阅读数:30万次/天
- ④ 每天的评论总数:30万条/天
- ⑤ 每天新增公众号总数:5000个/天
每个微信号最多只能关注1000个公众号。所以,需要450~500个微信号。微信一般的封号概率在20%左右,为了保证采集的稳定性,需要多出100个左右的微信号作为备用。
3.2 采集方式
3.2.1 目前情况
目前微信采集主要有以下三种方式:
- (一)通过微信PC版采集,在电脑正常登陆微信PC版后,通过模拟鼠标键盘操作的方式来进行采集。该方式硬件投入较大。
- (二)通过微信网页版采集,直接调用程序扫码登录微信网页版,登录后,微信关注的微信公众号,有新的信息推送到微信时,程序会自动获取推送信息。该方式下微信连接容易中断,无法保证采集的稳定性。
- (三)直接通过VirtualXposed监控微信。这种方式是程序直接装在手机上,自动拦截推送的信息。通过分析拦截的数据包,解析出有用的数据。该方式成本相对较低,且稳定性较好。
经过各方面比对,最终选取第三种方式,也就是直接通过VirtualXposed监控微信APP发出和接收的所有请求数据包,对其进行解析,分析出符合要求的文章链接。
3.2.2 备用方案
由于使用VirtualXposed拦截微信推送信息的方式,会对微信客户端进行篡
改,腾讯有可能升级技术,导致VirtualXposed插件无法再使用。或者,腾讯能通过技术准确的检测手机是否安装了VirtualXposed插件,从而大量封号,导致采集无法稳定进行。目前了解到的可行的备用方案有以下几种方式:
(一)使用3.2.1中的第二种方式。该种方式需要微信号在2017年10月份以前注册,否则无法登陆网页版;
(二)使用 AnyProxy 抓包的方式。该种方式对技术要求较高,目前尚未进行详细的测试。
3.3 采集流程
微信采集整体流程如下图3-1所示:
其中主要分为三部分:
- 1) 公众号的收集与添加;
- 2) 文章URL获取与解析;
- 3) 正文分布式采集;
3.3.1 公众号收集与添加
公众号收集可以通过以下步骤进行处理:
- 1) 遍历ES中八友历史数据,解析文章正文中存在的公众号信息,并保存数据;
- 2) 根据项目关键词,通过搜狗微信公众号搜索,进行搜索解析并保存入库;
- 3) 特殊需求的公众号由各个项目自行提供;
微信公众号添加详见4.3节。
3.3.2 文章URL获取与解析
微信文章 URL 处理流程如下图3-2所示:
3.3.3 正文采集
文章正文处理流程如下图3-3所示:
3.4 数据存储
微信采集过程中的数据存储主要分为三块,一是微信号和公众号的存储;二是公众号文章列表的存储;三是文章正文信息的存储。各个模块的存储详见下述介绍。
3.4.1 微信号存储
字段名称 | 类型 | 长度 | 为空 | 备注 |
id | int | 11 | NO | 主键id |
webchat_mobile_code | int | 11 | NO | 手机号 |
webchat_mobile_user | String | 20 | NO | 手机号所属人 |
webchat_mobile | int | 1 | NO3 | 运营商;1:联通;2:移动;3:电信 |
webchat_mobile_purchase | String | 10 | YES | 购买日期;yyyy-MM-dd |
webchat_code | String | 100 | NO | 微信号 |
webchat_nk | String | 100 | NO | 昵称 |
webchat_passw | String | 50 | YES | 微信密码 |
wechat_attiones | int | 4 | NO | 关注公众号数量 |
webchat_mark | String | 255 | YES | 说明 |
3.4.2 公众号存储
字段名称 | 类型 | 长度 | 为空 | 备注 |
id | int | 11 | NO | |
wechat_name | varchar | 50 | NO | 微信号名称 |
wechat_code | varchar | 60 | NO | 微信号 |
wechat_index_url | varchar | 200 | YES | 个人首页链接 |
webchat_biz | varchar | 50 | NO | biz用户唯一标识 |
webchat_id | int | 11 | YES | 微信账号表ID |
3.4.3 文章URL存储
在每个微信关注的公众号推送文章后,通过手机中安装的VirtualXposed插件,获取接收到的数据包,然后把数据包+手机号,一同发送到Redis接口,接口对数据包进行解析,把文章URL数据存放到Redis集群中。
根据八友微信接口每日的数据量分析,微信全量采集时需要处理的比较活跃的公众号在40~50万个,每天文章量在80~120万左右。为了便于管理,计划在Redis集群中,每天生成一个hash类型的缓存表,表名格式为:WeChat_yyyyMMdd,其中数据格式为key=URL,value=当前添加时间。如下图3-4所示
3.4.4 采集历史记录存储
微信文章通过分布式方式进行,每个采集脚本请求Redis接口服务,获取一定量的文章URL,然后采集正文,推送到kafka中。同时,请求过的URL信息,Redis接口会把信息从WeChat_yyyyMMdd缓存中删除,并保存到采集历史缓存中。hash类型的缓存表表名格式为:WeChat_History_yyyyMMdd,如下图3-2所示。其中key=URL,value=请求时的当前系统时间。如下图3-5所示
3.5 采集监控
整个采集流程中需要监控的节点主要为:XPosed插件;Redis接口服务接收和解析、入库;正文采集(源码获取、解析,kafka推送)。具体处理如下:
3.5.1 XPosed监控
主要分为两部分,一是XPosed插件自身的监控,防止长时间运行导致死机等;二是XPosed数据包发送。
- XPosed插件:自身缺陷机长时间运行,导致的死机等现象,目前尚未找到好的处理方式,只能通过重启插件或手机;
- XPosed数据包:数据包异常主要体现在调用Redis集群接口服务时,需要在接口服务异常的情况下,把获取到的数据推送到数据库或写到文件里,当接口服务正常时重新发送。
3.5.2 Redis接口服务监控
主要监控XPosed数据包解析和保存另两个步骤,在出现异常时把数据写到本地文件,待正常时重新进行二次处理。
3.5.3 正文采集监控
正文采集监控点主要包括:已采集URL记录、正文源码下载、正文解析,以及信息推送kafka等四部分。
- ① 已采集URL记录在历史信息表中,保留一个月,用于对采集异常的追溯;
- ② 正文源码下载:记录请求状态码;
- ③ 正文解析:记录解析状态;0:成功;1:失败;
- ④ 信息推送:推送异常数据保存在本地文件,待服务正常时进行二次推送。如果一条信息推送三次均未成功,则表示推送失败,同时删除内容。
同时,需要监控服务器IP被封的情况;
3.5.4 新增公众号监控
目前有些网站有公众号的搜索功能,前期可以使用项目相关的关键词在这些网站上进行搜索,获取部分新注册的公众号。搜索平台如下表3-1:
网站名称 | 链接 | 备注 |
搜狗微信公众号搜索 | http://weixin.sogou.com/weixin?type=1&query=%E9%93%B6%E8%A1%8C&ie=utf8&s_from=input&_sug_=y&_sug_type_= | |
推信网微信公众号推荐 | http://www.tuixinwang.cn/so.aspx?wd=%e9%87%91%e8%9e%8d&t=weixin&p=16 | |
聚微信 | https://www.juweixin.com/weixin/index/0/1?a=1&per_page=1540 |
表 3-1
4 采集运维管理
微信公众号数据的采集运维工作,主要体现在微信号的注册、养号、解封等工作上,至于微信文章的采集,基于现有的服务器,使用分布式可以较容易的进行处理。在微信号前期注册和养号期间,计划分配到数据管理中心各人员,作为一个KPI加分指标。由各人员在家中或者上下班路上,进行微信号注册、养号(发朋友圈、点赞、聊天)等。
4.1 微信注册
由于微信号的监管逐步加强,新注册的微信号被封的概率较大,所以微信号在注册时需要追寻一定的规则,具体注意事项如下:
- ① 注册请用官微,不要用那些多开软件注册
- ② 使用4G网络,千万不要用wifi,不要开GPS。同一个Wifi或GPS多个微信号注册,相当容易被封号的。
- ③ 每个手机必须提前存3-5个手机号进去,注册成功的时候,可以直接加上微信好友
- ④ 选择不同位置注册,可使用不同出行方式(公交、地铁、步行),每次注册的距离大于1.5km,每次注册间隔时间大于10分钟,最好分开时间段注册,尽量一批号不要是同一天,最好是分散到 3-5 天注册完成。
- ⑤ 注册时如果5分钟之内收不到验证码,先暂停该号码注册,不要频繁发送验证码
- ⑥ 随意关注几个公众号(搜索微信安全中心、京东、爱奇艺搞笑等公众账号)
- ⑦ 注册后一定先自己任意使用微信,之后注册其他号完成后也要使用一下之前注册的微信
- ⑧ 注册之后不能将手机关闭
- ⑨ 新微信号注册,密码不要一样。建议采用:相同字符+手机号的形式,也比较容易记。
- ⑩ 个人资料的地区一定不要填写,因为一点开就开始获取位置了,这个记录宁可不让微信知道。个人资料不要一次性全部填完,每天填一点,分批填写,可以增加活跃的权重。
- ⑪ 设置头像,注意,头像图片必须每张都不一样,如果一定需要设置同样的头像,请通过制图软件修改图片的大小,亮度等,另存成不同的图片,这样对于微信系统来说,可以绕过一定的检测。
- ⑫ 名字最好多个号都不一样 。
注意事项:
现在有专门卖微信号,买回来以后就可以使用,不过为了安全起见,还是建议登录一周,期间发一些朋友圈,或加一些微信,每天随便聊几句,这样可以降低异常概率
4.3 公众号添加
由于每个微信号每天最多只能关注40-50个公众号,同时为了保证微信号的稳定性(不被封号),需要公众号的添加分布在不同时间、不同地点。可以所有采集相关人员参与,同时根据实际情况做出相应的奖罚。
具体实施步骤如下:
- (1) 根据手机编号,把每一部手机分配到人;
- (2) 根据时间节点,合理安排每人每日需要处理的微信号(每天5台 /人)
- (3) 通过自动脚本,给每个人当天负责的每个微信号上,通过聊天的方式,给每个微信号发送需要关注的40~50个公众号文章;
- (4) 相关人员在办公室(尽量少)、上下班或者家中,添加微信接收到的文章的公众号为关注;
按上述方式,每天可以添加公众号:2400~3000个【5(台/人·天)*40~50(公众号)*12(总人数)】。40~50万个公众号最快需要123个工作日,
可以通过奖惩的方式,鼓励相关人员进行处理,加快进度。具体如下:
- ① 每周每人需正常关注1200个,每多关注1000个奖励200元。
- ② 如果未达到正常关注数量,当月考核降一级。
4.4 微信号解封
4.4.1 导致封号的情况
- ① 平时微信会封禁的账户类型(诈骗,色情营销,吸粉账号等)。
- ② 添加好友过于频繁,尤其是新号,必封!
- ③ 微信信息发布中出现累计超过10次的敏感词语,包含:支付宝、银行、银行卡、汇款、打款、打钱、帐号、帐户、转帐、网银、多少钱、怎么卖、价格”会被封号,或提醒账号有风险(解决方案:信息发布中,不要包含有和钱有关的字语)
- ④ 微信发送的内容被好友举报。 一般是2-5人的举报就会封号。
- ⑤ 频繁更换账号登陆,或是同一个账号频繁在不同的手机上登陆。
- ⑥ 传播色情,暴利,反动,辱骂、QQ号码、手机号码、广告类网址等信息,被发现就会封号
- ⑦ 手机上安装了 Xposed 、Magisk 框架(激活或者未激活)的用户。
- ⑧ 一部分只 ROOT 手机的用户(存疑)和使用越狱后 iOS 的用户。
- ⑨ 使用手机自带/第三方的微信分身功能同时使用多个微信账户。
- ⑩ 少部分什么都没装无辜躺枪的 Play 商店版微信用户。
- ⑪ 在多开上注册的微信账号。
- ⑫ 在聊天过程中频繁使用一些敏感词汇(如:转账、付款、色情等词)。
4.4.2 微信号解封
- ① 永久封号的,可以注销手机号重新申请;
- ② 临时封号,使用微信的自助解封功能进行处理;
4.5 采集部署管理
由于微信采集需要大批量的手机作为支撑。为了保证采集的稳定性,以及手机的安全性(主要为手机电池),手机的统一管理极为重要。主要通过以下步骤来方便实现统一管理:
4.5.1 手机支架管理
购买统一手机支架:要求手机支架稳定、利于手机散热、充电、拿取等;如下图4-1
同时对手机支架进行编号:
- ① 对每个手机支架进行编号;
- ② 对每个支架的每层进行编号;
- ③ 对每层每个手机位进行编号;
4.5.2 手机管理
主要是对手机进行编号,分为以下几步:
- ① 把购买的手机号添加到信源系统的微信号管理功能下;
- ② 手机编号规则:手机支架编号+每层编号+手机位编号+信源系统中手机号ID,作为每个手机的编号;
对手机支架和手机进行编号以后,在每个支架、支架每层、每个手机位上贴上相应的标签;然后,根据规则生成手机编号,贴于手机背部。最终效果类似下图4-2
4.5.3 手机群控管理
手机群系统,内部是套软件,外部是一台电脑和多个手机,逻辑是模拟手机的人工操作,使用手机自己的流量,不容易被封号。方便养号、解封等操作,群控软件效果如下图4-3、4-4所示:
手机群控软件(Total Control)报价如下:
项目 | 官方价格 |
多设备控制 (10) | ¥260/年 |
多设备控制 (20) | ¥540/年 |
多设备控制 (30) | ¥800/年 |
多设备控制 (50) (40) | ¥1400/年 (¥1600/年) |
多设备控制 (70) (60) | ¥2800/年 (¥3200/年) |
多设备控制 (100) | ¥4460/年 (¥5000/年) |
Total Control有以下主要特点:
- ① 无需手机root;
- ② 只适用于Android 4.0以上;
- ③ 可将手机自定义分组,分组控制/执行各种任务;
- ④ 消息集中管理;
4.6 运维工具开发
4.6.1 自动聊天工具
主要用于在公众号添加阶段,给每个手机发送待关注的公众号文章,方便相关人员进行公众号的关注;