이 프로젝트는 Web Collector 오픈 소스 크롤러 프레임워크와 Spring Boot를 사용하여 구현된 Java 기반 WeChat 공개 계정 기사 크롤러로, 지정된 공개 계정 기사를 정기적으로 크롤링하기 위해 다양한 프록시 전략을 사용하는 Sogou 플랫폼을 통해 얻을 수 있습니다. 브라우저 URL에 수동으로 액세스하면 크롤링이 시작됩니다.
이 프로젝트를 기반으로 2차 개발을 수행하고 반복적인 크롤링을 방지하도록 Redis를 구성하거나(이 프로젝트는 BreadthCrawler 대신 RamCrawler를 사용함) OSS를 구현하여 정적 리소스를 덤프하고 기사 저장 인터페이스를 구현하여 크롤링된 콘텐츠 라이브러리를 저장할 수 있습니다.
이 프로젝트의 특징:
Web Collector 크롤러 프레임워크 및 Spring Boot를 기반으로 구현됨
프록시 IP를 지정하는 것, 프록시 IP를 사용하지 않는 것, Abu Cloud 프록시를 사용하여 크롤러 IP가 차단되는 것을 방지하는 등 다양한 프록시 전략이 있습니다.
서버 측 사용을 지원하는 완전한 크롤러 결과 가져오기 기능이 있습니다.
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 인터페이스는 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 패킷 캡처 데이터를 구문 분석하여 기사 정보를 얻기 위한 두 가지 추가 인터페이스를 제공합니다.
/parseWxArticleList: 解析抓包获取的文章列表json
/parseWxArticleDetail: 解析获取抓包获取的文章详情json,后于 parseWxArticleList 接口执行。
앞으로는 자동화를 달성하기 위해 fiddler의 패킷 캡처 데이터 분석을 확장할 예정입니다. 후속 버전 업데이트를 기다려주세요 :)