JSpider学习四 —— Spider
来源:互联网 发布:打车软件收费 编辑:程序博客网 时间:2024/05/16 02:14
代码里只有一个实现类SpiderImpl,成员如下:
WorkerThreadPool spiders,爬虫线程池;
WorkerThreadPool thinkers,思考者线程池。
初始化方法------------------------------------------------------------------------
包含三个参数,SpiderContext和两个线程池成员各自的大小。
首先根据大小值生成spiders和thinkers。
ConfigurationFactory类的静态成员JSpiderConfiguration(在主方法中生成)包含了spiders和thinkers相关的两个参数,一个是CONFIG_THREADING_MONITORING_ENABLED表示spider或者thinker是否开启,一个是CONFIG_THREADING_MONITORING_INTERVAL表示监视的时间间隔。
在CONFIG_THREADING_MONITORING_ENABLED为true的情况下,初始化中会新建一个线程类ThreadPoolMonitorThread的匿名实例,第一个参数是context.getEventDispatcher(),即上下文的成员事件分派器,后面两个参数是监视的时间间隔和对应的线程池。
crawl方法------------------------------------------------------------------------
参数为一个SpiderContext实例context。
首先根据context的BaseURL生成了一个SpideringStartedEvent事件,并由context的分派器进行分派。
然后根据spiders、thinkers和context,生成了DispatchSpiderTasks和DispatchThinkerTasks的实例dispatchSpiderTask和dispatchThinkerTask,分别用来分派爬虫任务和思考者任务。
dispatchSpiderTask作为共享锁,限制了下面的这过程:
{
调用context的agent的start方法,其中对context的BaseURL进行了访问,并产生了访问事件;
spiders和thinkers调用了assignGroupTask方法,分别载入dispatchSpiderTask和dispatchThinkerTask来接收任务;
dispatchSpiderTask进入等待状态,spiders和thinkers在同时工作,这里捕获了InterruptedException异常,异常处理为调用本线程的interrupt方法;
}
spiders和thinkers停止所有线程;
根据context的storage的summary成员生成SpideringSummaryEvent事件,并由context的分派器派发;
根据context的storage成员生成SpideringStoppedEvent事件,并由context的分派器派发;
context的分派器关闭。
下一步分析dispatchSpiderTask和spiders的合作方式。
- JSpider学习四 —— Spider
- JSpider学习一 —— 基础
- JSpider学习二 —— 应用示例
- JSpider学习五 —— WorkerThreadPool
- JSpider学习三 —— 启动代码分析
- JSpider学习六 —— DispatcherThread和WorkerThread
- JSpider学习七——调试SpiderImpl的crawl
- Scrapy学习笔记(4)—Spider
- JSpider学习笔记 ( by quqi99 )
- JSpider学习笔记(1)
- zhihu-spider之Mybatis——zhihu-spider开源项目使用技术详解(其四)
- 初试Scrapy(五)—通过下载保存美女图片来学习下Spider中间件(Spider Middlewares)
- Spider网络爬虫学习——通过Get、Post方法直接抓取网页内容
- zhihu-spider之Lombok——zhihu-spider开源项目使用技术详解(其一)
- zhihu-spider之Swagger——zhihu-spider开源项目使用技术详解(其二)
- 初探Jspider
- Scrapy学习笔记(2)---Spider
- Spider
- Struts2树状菜单实现
- JAVA死锁解密
- 详细介绍ASP.NET中的七大内置对象
- 持续集成之路-03hudson持续集成
- Http协议python优秀库 urllib3 (支持python3)
- JSpider学习四 —— Spider
- MutiKeys
- norains的《那些年啊,那些事——一个程序员的奋斗史 》摘录(二)
- Ajax基本原理
- wireshark用法说明
- spring + jdbc
- Eclipse部署Android应用到27%就不动了
- js使用字符串生成函数
- 转载 CXF-Webservice 视频-only URL address