Ce projet est un robot d'exploration d'articles de comptes publics WeChat basé sur Java, mis en œuvre à l'aide du framework d'exploration open source Web Collector et de Spring Boot. Il peut être obtenu via la plate-forme Sogou en utilisant diverses stratégies de proxy pour explorer régulièrement les articles de comptes publics désignés, ou par. l'accès à l'URL du navigateur déclenche manuellement l'exploration.
Vous pouvez effectuer un développement secondaire basé sur ce projet et configurer Redis pour éviter une analyse répétée (ce projet utilise RamCrawler au lieu de BreadthCrawler), ou vous pouvez implémenter OSS pour vider les ressources statiques et implémenter des interfaces de sauvegarde d'articles pour enregistrer le contenu analysé.
Caractéristiques de ce projet :
Implémenté sur la base du framework d'exploration Web Collector et de Spring Boot
Il existe différentes stratégies de proxy, notamment la spécification d'une adresse IP proxy, la non-utilisation d'une adresse IP proxy et l'utilisation du proxy Abu Cloud pour éviter que l'adresse IP du robot ne soit bloquée.
Il existe une fonction complète d'importation des résultats du robot pour prendre en charge l'utilisation côté serveur.
Les interfaces comprenant le service Redis, le service OSS et le stockage de base de données sont réservées.
Prise en charge de la documentation de l'interface Swagger
installation maven
Ajustez le fichier de configuration application.yml
. Pour des paramètres spécifiques, veuillez consulter Configuration.
Démarrer le projet WxCrawlerApplication
Ouvrez le navigateur et visitez http://localhost:11111/wxCrawler?proxyPolicy=none
pour déclencher la tâche du robot d'exploration
Après l'exploration, le fichier est généré sous le chemin spécifié par crawler.weixin.outputPath
et archivé dans la méthode de dénomination du公众号名_文章名.html
Démarrez le projet, visitez http://localhost:11111/swagger-ui.html
et affichez toutes les interfaces externes comme suit :
Vous pouvez également accéder directement http://localhost:11111/help
pour obtenir la présentation de l'interface :
/parseWxArticleList
et /parseWxArticleDetail
sont utilisées pour les tests internes afin d'analyser la liste d'articles json et les détails de l'article json capturés par fiddler à partir du client WeChat. Étant donné que Sogou WeChat n'inclut actuellement que les « comptes d'abonnement » WeChat et non les « comptes de service », un traitement supplémentaire est requis pour les comptes publics de type compte de service. De plus, Sogou WeChat n'inclut actuellement pas le « nombre de lectures » et le « nombre de likes » des articles, ils doivent donc également être obtenus via la capture de paquets. Pour plus de détails, veuillez consulter la prise en charge de l'exploration des articles sur les comptes de service ainsi que du nombre de lectures et de likes .
server:
port: 11111
spring:
application:
name: wx-crawl
crawler:
weixin:
# 待爬取的微信公众号,支持爬取多个公众号,以;分隔(目前仅支持订阅号)
accounts: 雪球;缘聚小许
# outputPath 生成文章內容html文件
outputPath: D:/article_output
# 爬取访问一次后休眠时间,毫秒单位,为避免搜狗和微信封杀,建议设置至少3000以上
sleepTime: 5000
# 是否使用断点续爬,通过redis避免重复爬取
# 注意,由于会跳过已爬过的文章,因此就无法更新旧文章了
resumable: false
# 代理使用策略,包括不使用代理,使用指定代理IP以及使用阿布云代理
# 如: none | 222.182.56.50:8118,124.235.208.252:443 | abuyun
proxyPolicy: none
# 是否更新已存在的文章
updateArticle: true
proxy:
# 阿布云账号
abuyunAccount: xxxx
# 阿布云密码
abuyunPassword: xxxxx
Mise en place d'un entrepôt
L'interface de stockage des articles est com.xuzp.service.IArticleService
:
/**
* 保存文章
* @param articleVO
* @return
*/
ResultBase<String> save(ArticleTransferVO articleVO, Operation operation);
/**
* 查找文章
* @param articleVO
* @return
*/
ResultBase<ArticleTransferVO> find(ArticleTransferVO articleVO);
La classe d'implémentation du stockage d'articles est com.xuzp.service.impl.ArticleServiceImpl
, veuillez l'étendre vous-même.
Extension Redis
L'interface Redis est com.xuzp.service.IRedisService
:
/**
* @param key
* @param value
*/
void set(String key, String value);
/**
* @param key
* @return
*/
Boolean exists(String key);
/**
* @param key
* @return
*/
Object get(final String key);
La classe d'implémentation de l'interface Redis est com.xuzp.service.impl.RedisServiceImpl
, veuillez l'étendre vous-même.
Extension OSS
L'interface OSS est com.xuzp.service.IOssService
:
/**
* 把存于腾讯服务器上的包括视频,音频,图片等静态资源转储
* @param url 资源地址
* @return 新oss url
*/
ResultBase<String> resourceTranslation(String url);
La classe d'implémentation se trouve sur com.xuzp.service.impl.OssServiceImpl
, veuillez l'étendre vous-même.
Ajuster le temps d'exploration automatique
Le code de la tâche planifiée est com.xuzp.schedule.CrawlScheduledTasks
, veuillez ajuster l'heure vous-même :
/**
* 定时爬虫去抓取微信公众号文章
*/
@Scheduled(cron = "0 30 10,18 * * ?")
public void weixinCrawlTask() {
crawlerStater(new LazyLoader<Crawler>(){
@Override
public WxCrawler newInstance() {
return wxCrawlerConfig.wxCrawler(null);
}
}, WxCrawlerConstant.CRAWL_DEPTH, WX_CRAWLER, "公众号爬虫");
}
Prise en charge de l'exploration des articles du compte de service ainsi que du nombre de lectures et de likes
L'exploration actuelle est basée sur la plateforme Sogou WeChat http://weixin.sogou.com/
et est donc soumise aux restrictions suivantes :
Seuls les comptes d'abonnement WeChat sont inclus, mais les articles des comptes de service WeChat ne sont pas inclus.
Seuls les 10 derniers enregistrements peuvent être analysés, et tous les enregistrements historiques antérieurs ne peuvent pas être analysés.
Seules les informations de base de l'article sont incluses, notamment le titre, l'auteur, le résumé, le contenu de l'article, l'heure de publication, etc., mais les informations telles que le nombre de lectures de l'article et le nombre de likes ne sont pas incluses.
Actuellement, ce projet fournit deux interfaces supplémentaires pour obtenir des informations sur les articles en analysant les données de capture de paquets Fiddler :
/parseWxArticleList: 解析抓包获取的文章列表json
/parseWxArticleDetail: 解析获取抓包获取的文章详情json,后于 parseWxArticleList 接口执行。
À l'avenir, nous étendrons l'analyse des données de capture de paquets de Fiddler pour parvenir à l'automatisation. Veuillez attendre les mises à jour de version ultérieures :)