โปรเจ็กต์นี้เป็นโปรแกรมรวบรวมข้อมูลบทความบัญชีสาธารณะ WeChat ที่ใช้ Java ซึ่งใช้งานโดยใช้เฟรมเวิร์กโปรแกรมรวบรวมข้อมูลโอเพ่นซอร์ส Web Collector และ Spring Boot สามารถรับได้ผ่านแพลตฟอร์ม Sogou โดยใช้กลยุทธ์พร็อกซีที่หลากหลายเพื่อรวบรวมข้อมูลบทความบัญชีสาธารณะที่กำหนดเป็นประจำ หรือโดย การเข้าถึง URL ของเบราว์เซอร์ด้วยตนเองจะทำให้เกิดการรวบรวมข้อมูล
คุณสามารถดำเนินการพัฒนารองตามโปรเจ็กต์นี้ และกำหนดค่า Redis เพื่อหลีกเลี่ยงการรวบรวมข้อมูลซ้ำ (โปรเจ็กต์นี้ใช้ RamCrawler แทน BreadthCrawler) หรือคุณสามารถใช้ 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
ใช้สำหรับการทดสอบภายในเพื่อแยกวิเคราะห์รายการบทความ json และรายละเอียดบทความ json ที่บันทึกโดย fiddler จากไคลเอนต์ WeChat เนื่องจากปัจจุบัน 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:
/parseWxArticleList: 解析抓包获取的文章列表json
/parseWxArticleDetail: 解析获取抓包获取的文章详情json,后于 parseWxArticleList 接口执行。
ในอนาคต เราจะขยายการวิเคราะห์ข้อมูลการจับแพ็กเก็ตของ fiddler เพื่อให้เกิดระบบอัตโนมัติ โปรดรอการอัปเดตเวอร์ชันถัดไป :)