هذا المشروع عبارة عن زاحف مقالات للحساب العام 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 التي تم التقاطها بواسطة عازف الكمان من عميل 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 هي 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 接口执行。
في المستقبل، سنقوم بتوسيع تحليل بيانات التقاط حزم عازف الكمان لتحقيق الأتمتة، يرجى انتظار تحديثات الإصدار اللاحقة :)