Este projeto é um rastreador de artigos de contas públicas WeChat baseado em Java, implementado usando a estrutura de rastreador de código aberto Web Collector e Spring Boot. Ele pode ser obtido por meio da plataforma Sogou usando uma variedade de estratégias de proxy para rastrear regularmente artigos de contas públicas designadas, ou por meio de uma variedade de estratégias de proxy. acessar o URL do navegador manualmente aciona o rastreamento.
Você pode conduzir o desenvolvimento secundário com base neste projeto e configurar o Redis para evitar rastreamento repetido (este projeto usa RamCrawler em vez de BreadthCrawler) ou pode implementar OSS para despejar recursos estáticos e implementar interfaces de salvamento de artigos para salvar a biblioteca de conteúdo rastreado.
Características deste projeto:
Implementado com base na estrutura do rastreador Web Collector e Spring Boot
Existem várias estratégias de proxy, incluindo a especificação do IP do proxy, o não uso do IP do proxy e o uso do proxy Abu Cloud para evitar o bloqueio do IP do rastreador.
Há uma função completa de importação de resultados do rastreador para oferecer suporte ao uso no lado do servidor.
Interfaces incluindo serviço Redis, serviço OSS e armazenamento de banco de dados são reservadas.
Suporte à documentação da interface Swagger
instalação inteligente
Ajuste o arquivo de configuração application.yml
. Para parâmetros específicos, consulte Configuração.
Inicie o projeto WxCrawlerApplication
Abra o navegador e visite http://localhost:11111/wxCrawler?proxyPolicy=none
para acionar a tarefa do rastreador
Após o rastreamento, o arquivo é gerado no caminho especificado por crawler.weixin.outputPath
e arquivado no método de nomenclatura da公众号名_文章名.html
Inicie o projeto, visite http://localhost:11111/swagger-ui.html
e exiba todas as interfaces externas da seguinte forma:
Você também pode obter a introdução da interface acessando diretamente http://localhost:11111/help
:
/parseWxArticleList
e /parseWxArticleDetail
são usadas para testes internos para analisar o json da lista de artigos e os detalhes do artigo json capturados pelo violinista do cliente WeChat. Como o Sogou WeChat atualmente inclui apenas "contas de assinatura" do WeChat e não "contas de serviço", é necessário processamento adicional para contas públicas do tipo de conta de serviço. Além disso, o Sogou WeChat atualmente não inclui o “número de leituras” e o “número de curtidas” dos artigos, portanto eles também precisam ser obtidos por meio de captura de pacotes. Para obter detalhes, consulte suporte para rastreamento de artigos de contas de serviço, bem como contagem de leituras e curtidas .
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
Implementação de armazenamento
A interface de armazenamento de artigos é com.xuzp.service.IArticleService
:
/**
* 保存文章
* @param articleVO
* @return
*/
ResultBase<String> save(ArticleTransferVO articleVO, Operation operation);
/**
* 查找文章
* @param articleVO
* @return
*/
ResultBase<ArticleTransferVO> find(ArticleTransferVO articleVO);
A classe de implementação de armazenamento de artigos é com.xuzp.service.impl.ArticleServiceImpl
, estenda-a você mesmo.
Extensão Redis
A interface do Redis é 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);
A classe de implementação da interface Redis é com.xuzp.service.impl.RedisServiceImpl
, estenda-a você mesmo.
Extensão OSS
A interface OSS é com.xuzp.service.IOssService
:
/**
* 把存于腾讯服务器上的包括视频,音频,图片等静态资源转储
* @param url 资源地址
* @return 新oss url
*/
ResultBase<String> resourceTranslation(String url);
A classe de implementação está localizada em com.xuzp.service.impl.OssServiceImpl
, estenda-a você mesmo.
Ajustar o tempo de rastreamento automático
O código da tarefa agendada é com.xuzp.schedule.CrawlScheduledTasks
, ajuste você mesmo o horário:
/**
* 定时爬虫去抓取微信公众号文章
*/
@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, "公众号爬虫");
}
Suporte para rastreamento de artigos de contas de serviço, bem como leitura e contagem de curtidas
O rastreamento atual é baseado na plataforma Sogou WeChat http://weixin.sogou.com/
e, portanto, está sujeito às seguintes restrições:
Somente contas de assinatura do WeChat estão incluídas, mas artigos de contas de serviço do WeChat não estão incluídos.
Somente os últimos 10 registros podem ser rastreados e todos os registros históricos anteriores não podem ser rastreados.
Apenas as informações básicas do artigo são incluídas, incluindo título, autor, resumo, conteúdo do artigo, horário de publicação, etc., mas informações como o número de leituras do artigo e o número de curtidas não são incluídas.
Atualmente, este projeto fornece duas interfaces adicionais para obter informações do artigo analisando dados de captura de pacotes do Fiddler:
/parseWxArticleList: 解析抓包获取的文章列表json
/parseWxArticleDetail: 解析获取抓包获取的文章详情json,后于 parseWxArticleList 接口执行。
No futuro, expandiremos a análise dos dados de captura de pacotes do violinista para obter automação. Aguarde as atualizações de versão subsequentes :).