GuozhongCrawler系列教程 (2) CrawTaskBuilder详解

Stella981
• 阅读 501

    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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
达里尔 达里尔
1年前
给数组添加新数据,判断数据是否重复
多选要进行数组拼接,希望判断往原数组里添的新数据是否重复,封装个简易方法languageconstdataArrayname:'aaa',id:1,name:'bbb',id:2;constnewDataname:'ccc',id:2;//要添加的新数
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这