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

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

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

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.0 Spider.run() checkRunningStat()检测怕成是否在运行 initComponent() start 判断downloader是否存在,若为空则使用默认的HttpClientDownloader downloader.setThread(int thread) setThread()调用httpClientGenerator.setPoolSize(thread) 根据thread数目建立threadPool initComponent() End toDoQueue中取到一个request request是否为空 即toDoQueue为空 threadPool中是否是否 还有存活的thread break() waitNewUrl() 将request赋值给final量requestFinal threadPool启动线程 调用processRequest() request是否需要重试 rmRetryRequestFromQueue(page) extractAndAddRequests(page, true); sleep(site.getSleepTime()) apk=pageProcessor.process(page) extractAndAddRequests(page, spawnUrl) yes no yes no yes no

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

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

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

Created with Raphaël 2.1.0 downloader.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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值