乐趣区

关于java:基于Spring-Cloud的全自动化微信公众号消息采集系统

前言

因为公司业务需要,须要获取客户提供的微信公众号的历史文章并每天进行更新,三百多个公众号显然不能通过人工去每天查看,问题提交到了 IT 组。对于酷爱爬虫的我必定要盘他,之前做过搜狗的微信爬虫,起初始终致力于 java web 了,这个我的项目又从新燃起了我对爬虫的酷爱,第一次应用 spring cloud 架构来做爬虫,历时二十多天,终于搞定。接下来,我将通过一系列文章来分享此次我的项目经验,并奉上源码供大家斧正!

一、零碎简介

本零碎是基于 Java 开发,可通过简略配置公众号名称或微信号,实现定时或即时抓取微信公众号的文章(包含浏览量、点赞、在看)。

二、零碎架构

技术架构

Spring Cloud、SpringBoot、Mybatis-Plus、Nacos、RocketMq、nginx

存储

Mysql、MongoDB、Redis、Solr

缓存

Redis

代理

Fiddler

三、零碎优劣性

零碎长处

1、配置完公众号后可通过 Fiddler 的 JS 注入性能和 Websocket 实现全自动抓取;
2、零碎为分布式架构,具备高可用性;
3、RocketMq 音讯队列进行解耦,可解决网络抖动导致采集失败状况,若生产三次还未胜利则将日志记录到 mysql,确保文章的完整性;
4、可退出任意多个微信号进步采集效率和抵制反爬限度;
5、Redis 缓存了每个微信号 24 小时内采集记录,避免封号;
6、Nacos 作为配置核心,可通过热配置实时调整采集频率;
7、将采集到的数据存储到 Solr 集群,进步检索速度;
8、将抓包返回的记录存储到 MongoDB 存档便于查看谬误日志。

零碎毛病:

1、通过真机真号采集音讯,如果须要采集大量公众号的话须要有多个微信号作为撑持(若账号当日到了限度,可通过爬取微信公众平台接口获取音讯);
2、不是公众号一发文就能马上抓取到,采集工夫是零碎设定的,音讯有肯定的滞后(如果公众号不多微信号数量短缺可通过进步采集频率优化)。

四、模块简介

因为之后要退出管理系统和 API 调用性能,提前对一些性能进行了封装。

common-ws-starter

公共模块:寄存工具类和实体类等公共音讯。

redis-ws-starter

Redis 模块:对 spring-boot-starter-data-redis 的二次封装,对外裸露封装的 Redis 工具类和 Redisson 工具类。

rocketmq-ws-starter

RocketMq 模块:对 rocketmq-spring-boot-starter 的二次封装,提供生产重试和记录失败日志性能。

db-ws-starter

mysql 数据源模块:对 mysql 数据源进行封装,反对多数据源,自定义注解实现数据源动静切换。

sql-wx-spider

mysql 数据库模块:提供了所有对 mysql 数据库操作的性能。

pc-wx-spider

PC 端采集模块:蕴含 PC 端采集公众号历史音讯相干性能。

java-wx-spider

Java 提取模块:蕴含 java 程序提取文章内容相干性能。

mobile-wx-spider

模拟器采集模块:蕴含通过模拟器或手机端采集音讯的互动量相干性能。

五、大体流程图

六、运行截图

PC 和挪动端


控制台



运行完结

总结

我的项目亲测可用当初曾经在运行中,并且在我的项目开发中解决了微信的搜狗长期链接转永恒链接问题,心愿能对被类似业务困扰的老铁有所帮忙。现在做 java 如逆水行舟,逆水行舟,不知什么时候就被卷了进去,祝福每个人都有一本本人的葵花宝典,看到这还不给个反对吗。
间接附上 java 后端源码:ws-spider

退出移动版