Proyek ini adalah perayap artikel akun publik WeChat berbasis Java, diimplementasikan menggunakan kerangka perayap sumber terbuka Kolektor Web dan Spring Boot. Proyek ini dapat diperoleh melalui platform Sogou menggunakan berbagai strategi proxy untuk merayapi artikel akun publik yang ditunjuk secara teratur, atau dengan mengakses URL browser secara manual memicu perayapan.
Anda dapat melakukan pengembangan sekunder berdasarkan proyek ini dan mengonfigurasi Redis untuk menghindari perayapan berulang (proyek ini menggunakan RamCrawler, bukan BreadthCrawler), atau Anda dapat menerapkan OSS untuk membuang sumber daya statis dan menerapkan antarmuka penyimpanan artikel untuk menyimpan pustaka konten yang dirayapi.
Fitur proyek ini:
Diimplementasikan berdasarkan kerangka perayap Kolektor Web dan Spring Boot
Ada berbagai strategi proxy termasuk menentukan IP proxy, tidak menggunakan IP proxy, dan menggunakan proxy Abu Cloud untuk menghindari pemblokiran IP crawler.
Ada fungsi impor hasil crawler lengkap untuk mendukung penggunaan sisi server.
Antarmuka termasuk layanan Redis, layanan OSS, dan penyimpanan basis data dicadangkan.
Mendukung dokumentasi antarmuka Swagger
instalasi pakar
Sesuaikan file konfigurasi application.yml
. Untuk parameter spesifik, silakan lihat Konfigurasi.
Mulai proyek WxCrawlerApplication
Buka browser dan kunjungi http://localhost:11111/wxCrawler?proxyPolicy=none
untuk memicu tugas crawler
Setelah dirayapi, file tersebut dihasilkan di bawah jalur yang ditentukan oleh crawler.weixin.outputPath
dan diarsipkan dalam metode penamaan公众号名_文章名.html
Mulai proyek, kunjungi http://localhost:11111/swagger-ui.html
, dan tampilkan semua antarmuka eksternal sebagai berikut:
Anda juga dapat langsung mengakses http://localhost:11111/help
untuk mendapatkan pengenalan antarmuka:
Antarmuka /parseWxArticleList
dan /parseWxArticleDetail
digunakan untuk pengujian internal guna mengurai json daftar artikel dan detail artikel json yang ditangkap oleh fiddler dari klien WeChat. Karena Sogou WeChat saat ini hanya menyertakan "akun langganan" WeChat dan bukan "akun layanan", pemrosesan tambahan diperlukan untuk akun publik dari jenis akun layanan. Selain itu, Sogou WeChat saat ini tidak menyertakan "jumlah dibaca" dan "jumlah suka" artikel, sehingga artikel tersebut juga perlu diperoleh melalui pengambilan paket. Untuk detailnya, silakan lihat dukungan untuk artikel akun layanan perayapan serta jumlah bacaan dan suka .
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
Implementasi pergudangan
Antarmuka penyimpanan artikel adalah com.xuzp.service.IArticleService
:
/**
* 保存文章
* @param articleVO
* @return
*/
ResultBase<String> save(ArticleTransferVO articleVO, Operation operation);
/**
* 查找文章
* @param articleVO
* @return
*/
ResultBase<ArticleTransferVO> find(ArticleTransferVO articleVO);
Kelas implementasi penyimpanan artikel adalah com.xuzp.service.impl.ArticleServiceImpl
, harap perluas sendiri.
Ekstensi Redis
Antarmuka Redis adalah 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);
Kelas implementasi antarmuka Redis adalah com.xuzp.service.impl.RedisServiceImpl
, harap perluas sendiri.
ekstensi OSS
Antarmuka OSS adalah com.xuzp.service.IOssService
:
/**
* 把存于腾讯服务器上的包括视频,音频,图片等静态资源转储
* @param url 资源地址
* @return 新oss url
*/
ResultBase<String> resourceTranslation(String url);
Kelas implementasi terletak di com.xuzp.service.impl.OssServiceImpl
, harap perluas sendiri.
Sesuaikan waktu perayapan otomatis
Kode tugas yang dijadwalkan adalah com.xuzp.schedule.CrawlScheduledTasks
, silakan sesuaikan sendiri waktunya:
/**
* 定时爬虫去抓取微信公众号文章
*/
@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, "公众号爬虫");
}
Dukungan untuk merayapi artikel akun layanan serta jumlah bacaan dan suka
Perayapan saat ini didasarkan pada platform Sogou WeChat http://weixin.sogou.com/
dan oleh karena itu tunduk pada batasan berikut:
Hanya akun langganan WeChat yang disertakan, namun artikel dari akun layanan WeChat tidak disertakan.
Hanya 10 catatan terakhir yang dapat dirayapi, dan semua catatan sejarah masa lalu tidak dapat dirayapi.
Hanya informasi dasar artikel yang dicantumkan, antara lain judul, pengarang, abstrak, isi artikel, waktu terbit, dan lain-lain, namun informasi seperti jumlah artikel yang dibaca dan jumlah suka tidak dicantumkan.
Saat ini, proyek ini menyediakan dua antarmuka tambahan untuk memperoleh informasi artikel dengan mengurai data penangkapan paket Fiddler:
/parseWxArticleList: 解析抓包获取的文章列表json
/parseWxArticleDetail: 解析获取抓包获取的文章详情json,后于 parseWxArticleList 接口执行。
Di masa depan, kami akan memperluas analisis data pengambilan paket fiddler untuk mencapai otomatisasi. Harap tunggu pembaruan versi berikutnya :)