このプロジェクトは、Java ベースの WeChat パブリック アカウント記事クローラーであり、Web Collector オープン ソース クローラー フレームワークと Spring Boot を使用して実装されています。これは、指定されたパブリック アカウント記事を定期的にクロールするためのさまざまなプロキシ戦略を使用して、Sogou プラットフォームを通じて取得できます。ブラウザの URL に手動でアクセスすると、クロールがトリガーされます。
このプロジェクトに基づいて二次開発を実施し、繰り返しのクロールを回避するように Redis を構成することも (このプロジェクトでは BreadthCrawler の代わりに RamCrawler を使用します)、OSS を実装して静的リソースをダンプし、クロールされたコンテンツ ライブラリを保存する記事保存インターフェイスを実装することもできます。
このプロジェクトの特徴:
Web Collector クローラー フレームワークと Spring Boot に基づいて実装
プロキシ IP を指定する、プロキシ IP を使用しない、クローラー IP がブロックされないように Abu Cloud プロキシを使用するなど、さまざまなプロキシ戦略があります。
サーバー側での使用をサポートするための完全なクローラー結果インポート機能があります。
Redis サービス、OSS サービス、データベース ストレージなどのインターフェイスは予約されています。
Swagger インターフェイスのドキュメントのサポート
メイブンのインストール
設定ファイルapplication.yml
を調整します。特定のパラメータについては、 「設定」を参照してください。
プロジェクトWxCrawlerApplication
を開始します
ブラウザを開いてhttp://localhost:11111/wxCrawler?proxyPolicy=none
アクセスして、クローラー タスクをトリガーします。
クロール後、 crawler.weixin.outputPath
で指定したパス下にファイルが生成され、公众号名_文章名.html
の命名方法でアーカイブされます。
プロジェクトを開始し、 http://localhost:11111/swagger-ui.html
にアクセスし、次のようにすべての外部インターフェイスを表示します。
http://localhost:11111/help
に直接アクセスして、インターフェイスの概要を確認することもできます。
/parseWxArticleList
と/parseWxArticleDetail
インターフェイスは、WeChat クライアントから fiddler によってキャプチャされた記事リスト json と記事詳細 json を解析する内部テストに使用されます。 Sogou WeChat には現在 WeChat の「サブスクリプション アカウント」のみが含まれており、「サービス アカウント」は含まれていないため、サービス アカウント タイプのパブリック アカウントには追加の処理が必要です。また、Sogou WeChatでは現状、記事の「閲覧数」や「いいね数」は含まれていないため、これらもパケットキャプチャで取得する必要がある。詳細については、サービス アカウント記事のクロール、および閲覧数といいね数のサポートを参照してください。
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
倉庫保管の実施
記事ストレージ インターフェイスはcom.xuzp.service.IArticleService
です。
/**
* 保存文章
* @param articleVO
* @return
*/
ResultBase<String> save(ArticleTransferVO articleVO, Operation operation);
/**
* 查找文章
* @param articleVO
* @return
*/
ResultBase<ArticleTransferVO> find(ArticleTransferVO articleVO);
記事格納実装クラスはcom.xuzp.service.impl.ArticleServiceImpl
ですので、ご自身で拡張してください。
Redis 拡張機能
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);
Redis インターフェースの実装クラスはcom.xuzp.service.impl.RedisServiceImpl
です。ご自身で拡張してください。
OSS 拡張機能
OSS インターフェイスはcom.xuzp.service.IOssService
です。
/**
* 把存于腾讯服务器上的包括视频,音频,图片等静态资源转储
* @param url 资源地址
* @return 新oss url
*/
ResultBase<String> resourceTranslation(String url);
実装クラスはcom.xuzp.service.impl.OssServiceImpl
にあります。ご自身で拡張してください。
自動クロール時間を調整する
スケジュールされたタスクのコードはcom.xuzp.schedule.CrawlScheduledTasks
です。時間を自分で調整してください。
/**
* 定时爬虫去抓取微信公众号文章
*/
@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, "公众号爬虫");
}
サービス アカウント記事のクロールと、読み取り数やいいね数のサポート
現在のクロールは Sogou WeChat プラットフォームhttp://weixin.sogou.com/
に基づいているため、次の制限が適用されます。
WeChat サブスクリプション アカウントのみが含まれますが、WeChat サービス アカウントからの記事は含まれません。
クロールできるのは最後の 10 レコードのみであり、過去の履歴レコードをすべてクロールすることはできません。
掲載されるのはタイトル、著者、要約、記事内容、公開時期などの記事の基本情報のみで、記事の閲覧数やいいね数などの情報は含まれません。
現在、このプロジェクトは、Fiddler パケット キャプチャ データを解析して記事情報を取得するための 2 つの追加インターフェイスを提供しています。
/parseWxArticleList: 解析抓包获取的文章列表json
/parseWxArticleDetail: 解析获取抓包获取的文章详情json,后于 parseWxArticleList 接口执行。
将来的には、自動化を実現するために fiddler のパケット キャプチャ データの分析を拡張する予定です。今後のバージョンの更新をお待ちください:)。