GuozhongCrawler系列教程 (2) CrawTaskBuilder详解
2015-06-08 00:00
190 查看
摘要: GuozhongCrawler的是一个无须配置、便于二次开发的爬虫开源框架,它提供简单灵活的API,只需少量代码即可实现一个爬虫。模块化设计完全面向业务提供接口,功能覆盖整个爬虫的生命周期(链接提取、页面下载、内容抽取、持久化),支持多线程抓取,分布式抓取,并支持自动重试,定制执行js、自定义cookie等功能。在处理网站抓取多次后被封IP的问题上,GuozhongCrawler采用动态轮换IP机制有效防止IP被封。另外,源码中的注释及Log输出全部采用通俗易懂的中文。让初学者能有更加深刻的理解
GuozhongCrawler是分层架构。要快速学习CrawlTask独立的配置多少要了解框架的源代码。所以CrawTaskBuilder提供要更加扁平且易于理解的的方式创建CrawTask
参数:
返回:
CrawTaskBuilder
参数:
返回:
CrawTaskBuilder
参数:
返回:
CrawTaskBuilder
返回:
参数:
返回:
参数:
返回:
参数:
返回:
参数:
返回:
返回:
参数:
返回:
参数:
返回:
参数:
返回:
参数:
参数:
参数:
参数:
返回:
参数:
返回:
抛出:
参数:
返回:
参数:
返回:
CrawTaskBuilder
参数:
返回:
返回:
CrawlTask
GuozhongCrawler是分层架构。要快速学习CrawlTask独立的配置多少要了解框架的源代码。所以CrawTaskBuilder提供要更加扁平且易于理解的的方式创建CrawTask
方法详细资料
useThread
public CrawTaskBuilder useThread(int threadNum)设置CrawlTask下载处理Request的线程数量
参数:
threadNum-
返回:
CrawTaskBuilder
usePipeline
public CrawTaskBuilder usePipeline(java.lang.Class<? extends Pipeline> pipelineCls)设置实现好的Pipeline类Class
参数:
pipelineCls- 持久化处理类
返回:
CrawTaskBuilder
usePageRetryCount
public CrawTaskBuilder usePageRetryCount(int retryCount)如果由于网络问题,请求url时可能会出现失败的情况。那么你设置最大重新请求的次数默认重新请求1次
参数:
retryCount-
返回:
CrawTaskBuilder
usePageEncoding
public CrawTaskBuilder usePageEncoding(PageRequest.PageEncoding defaultEncoding)一般抓取某个网站会有统一的编码,如果你不想每次都调用PageRequest.setPageEncoding的话,那么你可以设置一个默认的编码
返回:
injectStartUrl
public CrawTaskBuilder injectStartUrl(java.lang.String url, java.lang.Class<? extends PageProcessor> processorCls, java.util.Map<java.lang.String,java.lang.Object> contextAttribute, PageRequest.PageEncoding pageEncoding)添加种子URL设置附加参数和页面编码格式 每个injectStartUrl方法注入的种子URL会用一个单独的StatContext包装。如果StatContext在抓取过程中不会产生较多新的跟进Request 那么推荐你使用useDynamicEntrance设置入口URL将会更加提升效率
参数:
url-
contextAttribute-
PageEncoding-
返回:
injectStartUrl
public CrawTaskBuilder injectStartUrl(java.lang.String url, java.lang.Class<? extends PageProcessor> processorCls, java.util.Map<java.lang.String,java.lang.Object> contextAttribute)添加种子URL并设置附加参数 每个injectStartUrl方法注入的种子URL会用一个单独的StatContext包装。如果StatContext在抓取过程中不会产生较多新的跟进Request 那么推荐你使用useDynamicEntrance设置入口URL将会更加提升效率
参数:
url-
contextAttribute-
返回:
injectStartUrl
public CrawTaskBuilder injectStartUrl(java.lang.String url, java.lang.Class<? extends PageProcessor> processorCls)添加种子URL,并指定PageProcessor。 每个injectStartUrl方法注入的种子URL会用一个单独的StatContext包装。如果StatContext在抓取过程中不会产生较多新的跟进Request 那么推荐你使用useDynamicEntrance设置入口URL将会更加提升效率
参数:
url-
返回:
useDynamicEntrance
public CrawTaskBuilder useDynamicEntrance(java.lang.Class<? extends DynamicEntrance> dynamicEntranceCls)如果你想在单个StartContext中直接初始化跟进URL,或者让爬虫分批注入种子的话。那么DynamicEntrance提供了这样的接口
参数:
dynamicEntranceCls- DynamicEntrance的继承实现类
返回:
useQueuePriorityRequest
public CrawTaskBuilder useQueuePriorityRequest()使用优先级队列,在一些抓取分页较多情景下推荐使用QueuePriorityRequest。因为 它能很好的保证优先级高的Request优先被处理。从而防止队列金字塔式的膨胀
返回:
useQueueDelayedPriorityRequest
public CrawTaskBuilder useQueueDelayedPriorityRequest(int delayInMilliseconds)使用延迟优先级队列,和QueuePriorityRequest类似。但QueueDelayedPriorityRequest额外提供了延迟抓取的功能 在一些因为请求频率过快而被封的网站上推荐使用QueueDelayedPriorityRequest
参数:
delayInMilliseconds- 每次取Request距离上次时间延迟delayInMilliseconds毫秒
返回:
useTaskLifeListener
public CrawTaskBuilder useTaskLifeListener(TaskLifeListener listener)设置监听器,监听爬虫的CrawlTask的onStart 和 onFinish。在此你可以发送邮件或者其他方式来知晓爬虫的执行情况
参数:
listener-
返回:
useCookie
public CrawTaskBuilder useCookie(java.util.Set<Cookie> cookies)设置Cookie,当Driver创建时设置cookies。在需要登录情况下你可以将登录好的Cookies注入downloader
参数:
listener-
返回:
addChromeDriverLifeListener
public void addChromeDriverLifeListener(ChromeDriverLifeListener chromeDriverLifeListener)当你使用ChromeDownloader作为下载器时可以设置ChromeDriverLifeListener
参数:
listener-
addWebDriverLifeListener
public void addWebDriverLifeListener(WebDriverLifeListener webDriverLifeListener)当你使用WebDriverDownloader作为下载器时可以设置ChromeDriverLifeListener
参数:
listener-
addHttpClientLifeListener
public void addHttpClientLifeListener(HttpClientLifeListener httpClientLifeListener)当你使用默认的DefaultPageDownloader作为下载器时可以设置HttpClientLifeListener
参数:
listener-
useProxyIpPool
public CrawTaskBuilder useProxyIpPool(java.lang.Class<? extends ProxyIpPool> proxyIpPoolCls, int initSize, long pastTime, int max_use_count)使用代理IP切换机制时设置一个ProxyIpPool的实现类即可。在封IP网站下推荐使用收费版代理IP效果更佳
参数:
proxyIpPoolCls-
initSize- 每次代理IP缓冲池IP不足时加载IP的个数,推荐使用公式initSize=thread*5
pastTime- 每个IP自身的过期时间,当代理IP过期时间到的时候会被清除。这个值根据代理IP的质量决定
max_use_count- 每个代理IP最多使用的次数。推荐使用公式max_use_count=(目标网站连续请求才被封的次数)减去 2到3
返回:
useProxyIpPoolInstance
public CrawTaskBuilder useProxyIpPoolInstance(ProxyIpPool proxyIpPool)当然你也可以自己构造一个实例设置ProxyIpPool
参数:
proxyIpPool-
返回:
抛出:
java.lang.SecurityException
java.lang.NoSuchMethodException
useTimer
public final CrawTaskBuilder useTimer(int hour, long period, int endHour)使用定时循环启动,使用24小时制
参数:
hour- 从几点开始启动,如果当前时间小于改时间则等待到改时间启动
period- 每次抓取时间间隔 单位毫秒
endHour- 到几点结束
返回:
useDownloadFileThread
public CrawTaskBuilder useDownloadFileThread(int thread)设置同时下载文件的线程数 ,默认3个线程
参数:
thread-
返回:
CrawTaskBuilder
useDownloadFileDelayTime
public CrawTaskBuilder useDownloadFileDelayTime(int millisecond)文件下载延迟,默认300ms
参数:
millisecond-
返回:
build
public CrawlTask build()配置完成,即可创建CrawlTask
返回:
CrawlTask
相关文章推荐
- Extjs4.0 最新最全视频教程
- OpenERP 的XML-RPC的实例+many2many,one2many,many2one...
- CSS3属性教程与案例分享
- jquery教程靠边站,一分钱不花让你免费学会jquery
- autoit入门教程小结第1/5页
- 用Photoshop 制作草地效果简明教程
- 比较完整简洁的Flash处理XML文档数据教程 上篇第1/3页
- VBS基础编程教程 (第1篇)
- SQLite教程(十一):临时文件
- VBS基础编程教程 (第3篇)
- VBS教程:运算符-运算符(+)
- PostgreSQL教程(十):性能提升技巧
- PostgreSQL教程(二):模式Schema详解
- PostgreSQL教程(十三):数据库管理详解
- PostgreSQL教程(八):索引详解
- PostgreSQL教程(三):表的继承和分区表详解
- XML简易教程之三
- ruby 数组使用教程
- PostgreSQL教程(十九):SQL语言函数
- PostgreSQL教程(四):数据类型详解