WebMagic爬取论坛链接实现流程分析

本文详细介绍了论坛爬虫的工作流程,包括整体爬取页面的过程、SpiderTrigger触发机制、与MyHttpClientDownloader交互顺序及Downloader下载Page流程。适用于希望了解论坛爬虫实现细节的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整体爬取论坛页面流程图:

Created with Raphaël 2.1.0开始输入关键字得到关键字搜索页面是否是应用页面登陆,否则无法获得posttime下载该页面,并获得tid和posttime使用tid和posttime回复该页面再次下载该页面并爬取apk下载链接结束yesno

SpiderTrigger调用Spider工作流程分析:

Created with Raphaël 2.1.0开始Sipder.setDownloader()Sipder.addUrl()addUrl()中调用addRequest(new Request(url)),以及signalNewUrl()Spider.thread(20),启动20个线程run()

Spider工作流程分析:

Created with Raphaël 2.1.0Spider.run()checkRunningStat()检测怕成是否在运行initComponent() start判断downloader是否存在,若为空则使用默认的HttpClientDownloaderdownloader.setThread(int thread)setThread()调用httpClientGenerator.setPoolSize(thread)根据thread数目建立threadPoolinitComponent() EndtoDoQueue中取到一个requestrequest是否为空即toDoQueue为空threadPool中是否是否还有存活的threadbreak()waitNewUrl()将request赋值给final量requestFinalthreadPool启动线程调用processRequest()request是否需要重试rmRetryRequestFromQueue(page)extractAndAddRequests(page, true);sleep(site.getSleepTime())apk=pageProcessor.process(page)extractAndAddRequests(page, spawnUrl)yesnoyesnoyesno

SpiderTirgger Spider 与MyhttpClientDownloader交互的顺序图如下:

Created with Raphaël 2.1.0SpiderTriggerSpiderTriggerSpiderSpiderMyHttpClientDownloaderMyHttpClientDownloaderPageProcessorPageProcessorsetDownloader()addUrl()thread(20)启动20个Spider线程进行爬取run()开始执行线程checkRunningStat()检测爬虫是否在运行initComponent()检查或初始化downloader线程池等ComponentprocessRequest()启动子线程调用processRequest()方法downloader.download(request, Spider)ProcessRequest()调用downloader的download方法,此处为GET请求下载,得到pagereturn pagerquest重试如果request需要重试,首先应该从donePushQueue中移除移除的元素就是队列头部的元素sleep()process(page)获得Apk返回Apk

Downloader中的download(),下载page的流程图如下:

Created with Raphaël 2.1.0downloader.download()开始site=task.getSite()其中Site()是在创建Spider对象时PagePro给的以下使用httpClient进行页面的下载getHttpUriRequest()获得HttpUriRequest-getHttpUriRequest()开始调用selectRequestMethod()获得requestBuilder--selectRequestMethod()开始String method = request.getMethod()得到请求方式,若null则默认get设置请求方式,并返回对应的requestBuilder--selectRequestMethod()结束设置header配置requestConfigBuilder包括代理、超时等将requestConfigBuilder传给requestBuilder-getHttpUriRequest()结束得到httpUriReauest,设置请求头等并执行得到httpResponse成功,通过handleResponse()得到page返回page
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值