Heritrix3.0.0在2009年底发布,但资料甚少.我这里就先抛砖引用,以前也分析过Heritrix1.4.3,但只是源码,不系统.这里就系统的介绍Heritrix的使用,源码分析和借鉴.先介绍Heritrix的下载与使用吧.

1.下载,下载地址:http://sourceforge.net/projects/archive-crawler/files/heritrix3/.下载后的截图为

这里大家可以看下README.TXT文件.这里面有对Heritrix基本的介绍.

2.下面开始使用Heritrix3.0.0

进入CMD(开始->运行),进入Heritrix3.0.0所在目录,我这里是D:/heritrix/heritrix3.0.0/bin,这里大家截图也可以看到.输入以下命令:heritrix -a admin:admin,这里会跳出一个cmd,截图如下:

就表示你已经启动Heririx成功,然后在浏览器里输入,https://localhost:8443(注意,是https,不是http).由于Heritrix3.0.0已通过https登录,用户名跟密码就是以上输入的admin:admin.所以不同于早期版本,我这里用的是火狐浏览器,界面可能如下

ie等可能不一样.然后点击我已充分了解可能的风险,点添加例外,再输入用户名跟密码,也就是刚才的admin,admin后,便可以进入Heritrix3.0.0 web界面了.大概如下:

出现以上界面,就表示你可以使用Heritrix去抓取数据了,但这里还需配置Job,也就是抓取任务.

这里先大概介绍下界面:

  1. Memory 表示内存使用情况
  2. Jobs Directory:表示抓取job目录,默认是Heritrix_home/jobs
  3. rescan按钮表示扫描jobs目录,目录有改动,也就是抓取任务有增加或者删除,这里则都会显示
  4. create按钮表示创建一个Job
  5. add按钮表示添加一个已经存在的job,这里是输入这个job所在的路径
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!,如何在Heritrix上创建抓取任务(CrawlJob)并运行.开始抓取!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

首先创建抓取,本可以通过WEB界面来创建,但有时会出现一些莫名奇妙的问题,我这里通过手工创建的方式.上一篇我的Heritrix所在目录为D:\heritrix\heritrix-3.0.0,所有的抓取任务默在jobs目录下.这里我们手动在jobs目录下创建一个目录,我这里取名为test_job.然后进入D:\heritrix\heritrix-3.0.0\jobs目录下有个profile-defaults目录,再进入,里面有个profile-crawler-beans.cxml文件.将该文件拷贝到刚才创建的test_job下.并将其改名为crawler-beans.cxml.不改名的话,Heritrix会默认你的job为模板job.不会进行相关抓取.

这里简单介绍下crawler-beans.cxml.该文件相比Heritrix早期版本改进很多,首先使用Spring管理该文件.同时用该文件代替了Heritrix早期版本多个配置文件,如order.xml和seeds.txt.也算Heritrix3.0的一个新特性,我接下来会介绍Heritrix的所有新特性.我们只要在该文件中修改相关bean就可以很好的控制一个爬虫的抓取.特别是垂直爬虫,可以说可以很方便进行配置.至于详细介绍crawler-bean.cxml中各个bean以及它的属性,请看我下一篇博客.也只有了解了各个bean的左右,才可以很好的控制爬虫.

运行一个简单的抓取,先要修改以下地方.

1.创建Job

Xml代码  
  1. <bean id="simpleOverrides">
  2. <property name="properties">
  3. <value>
  4. metadata.operatorContactUrl=ENTER_AN_URL_WITH_YOUR_CONTACT_INFO_HERE_FOR_WEBMASTERS_AFFECTED_BY_YOUR_CRAWL
  5. metadata.jobName=basic
  6. metadata.description=Basic crawl starting with useful defaults            </value>
  7. </property>
  8. </bean>

1)metadata.operatorContactUrl   你控制Heritrix的URL,一般是http://127.0.0.1

2)metadata.jobName 表示你的抓取名字,我们刚才创建的是test_job,那就修改为test_job

3)metadata.description 表示对这个抓取任务的简单描述,我们这里就描述为 firt crawl job

2.设置种子

Xml代码  
  1. <bean id="longerOverrides">
  2. <property name="properties">
  3. <props>
  4. <prop key="seeds.textSource.value">
  5. # URLS HERE
  6. http://example.example/example
  7. </prop>
  8. </props>
  9. </property>
  10. </bean>

以上的http://example.example/example就表示是种子了,这里设置你想抓取的种子.比如我这里设置http://guoyunsky.blogcn.com

3)完善job信息和本机信息

Xml代码  
  1. <bean id="metadata" autowire="byName">
  2. <property name="operatorContactUrl" value="[see override above]"/>
  3. <property name="jobName" value="[see override above]"/>
  4. <property name="description" value="[see override above]"/>
  5. <!-- <property name="operator" value=""/> -->
  6. <!-- <property name="operatorFrom" value=""/> -->
  7. <!-- <property name="organization" value=""/> -->
  8. <!-- <property name="audience" value=""/> -->
  9. <property name="userAgentTemplate"
  10. value="Mozilla/5.0 (compatible; heritrix/@VERSION@ +@OPERATOR_CONTACT_URL@)"/>
  11. </bean>

这个Bean按道理可以通过刚才设置的simpleOverrides来获取,但貌似不完善,我们还是自己再设置下吧.

1) operatorContactUrl 控制爬虫的URL,一般是http://127.0.0.1

2)jobName  抓取任务名字,这里是test_job

3) description 描述,这里是first crawl job

4)以上几个属性除了userAgentTemplate有必要设置的话,都可以不设置.userAgentTemplate这里设置是为了伪造浏览器去抓取数据,

如果没有设置该值,则很容易被防爬虫的网站K掉,这里设置@VERSION为3.0,+@OPERATOR_CONTACT_URL为操作爬虫联系方式,

我这里填我的emal:guoyunsky@hotmail.com

以上三个bean设置完毕的话,就可以运行抓取了.不过是全网抓取.

这里回到操作界面,默认的是https://localhost:8443/,正常的话会在Job Directories下显示刚才创建的test_job,如果没有的话点下rescan按钮,重新扫描一下.显示除了test_job后我们点击它,这时就会进入该job的控制台了.界面如下:

操作界面,各个组件一下博客我会讲解,这里点击launch按钮,意思是载入这个抓取任务.载入的话会获取这个job的所有配置和以前抓取的各种文件,如日志.默认的话,载入这个抓取任务后,会进入暂停状态.根据界面上Job is Active: PAUSED来判断,如果是PAUSED的话这里再点击unpause按钮,如此爬虫就开始进入抓取了,这时Job is Active:会变成RUNNING,表示抓取正在进行了.

正常抓取的话,会在test_job目录下出现一个warcs目录,这个目录里面放的就是抓取的数据.看到这个目录的就表示你抓取成功了.如下图所示:

分享到:  
Heritrix3.0教程(四) CrawlJob控制台界面 ... | Heritrix3.0教程(二) 下载安装与运行
  • 2012-12-09 14:02
  • 浏览 5133
  • 评论(4)
  • 论坛回复 / 浏览 (0 / 5865)
  • 分类:企业架构
  • 相关推荐
评论
4 楼 koubi1986 2014-03-12  
你好。请问一下。

我这里,点击完“build”后,再点击“launch”就出现异常了。

Exception in thread "dianping launchthread" java.lang.UnsatisfiedLinkError: Error looking up function 'CreateSymbolicLinkA': ÕҲ»µ½ָ¶¨µ
at com.sun.jna.Function.<init>(Function.java:134)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:345)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:325)
at com.sun.jna.Library$Handler.invoke(Library.java:203)
at $Proxy6.CreateSymbolicLinkA(Unknown Source)
at org.archive.util.FilesystemLinkMaker.makeSymbolicLink(FilesystemLinkMaker.java:94)
at org.archive.spring.PathSharingContext.initLaunchDir(PathSharingContext.java:164)
at org.archive.spring.PathSharingContext.start(PathSharingContext.java:114)
at org.archive.crawler.framework.CrawlJob.startContext(CrawlJob.java:455)
at org.archive.crawler.framework.CrawlJob$1.run(CrawlJob.java:429)

请问,你知道如何解决吗。

3 楼 古叶斋 2014-01-16  
zhrb 写道
抓取到这个warc文件有什么用呢?
以前的heritrix可以按照目录的形式来存放所有文件,不仅有页面文件还有doc、jpg等
这个warc貌似只存放了页面文件而已吧。

ArchiveReader ar = WARCReaderFactory.get("/path/to/your/file.warc.gz");  
// ArchiveReader对象本身实现了Iterator<ArchiveRecord>接口,可以用for循环。  
for (ArchiveRecord rec : ar) {  
// 获取WARC记录头。  
   ArchiveRecordHeader header = rec.getHeader();  
   // 可以对header做一些操作。  
   // 读出这条记录的内容。ArchiveRecord继承了InputStream类。  
   // 我使用了Commons-IO。不过这样读太暴力了……  
   byte[] content = IOUtils.toByteArray(rec);  
   // 对内容做什么都行。  
}  
ar.close();

2 楼 zqcj6291151 2013-12-13  
launch的时候包异常 求大神解答
An error occured
Cause: java.lang.IllegalStateException: BdbModule not started

java.lang.IllegalStateException: BdbModule not started
at org.archive.bdb.BdbModule.openDatabase(BdbModule.java:328)
at org.archive.bdb.BdbModule.getStoredMap(BdbModule.java:652)
at org.archive.crawler.reporting.StatisticsTracker.calcSeedRecordsSortedByStatusCode(StatisticsTracker.java:829)
at org.archive.crawler.reporting.SeedsReport.write(SeedsReport.java:44)
at org.archive.crawler.reporting.StatisticsTracker.writeReportFile(StatisticsTracker.java:909)
at org.archive.crawler.reporting.StatisticsTracker.writeReportFile(StatisticsTracker.java:888)
at org.archive.crawler.restlet.ReportGenResource.represent(ReportGenResource.java:50)
at org.restlet.resource.Resource.getRepresentation(Resource.java:302)
at org.restlet.resource.Resource.handleGet(Resource.java:464)

1 楼 zhrb 2013-07-11  
抓取到这个warc文件有什么用呢?
以前的heritrix可以按照目录的形式来存放所有文件,不仅有页面文件还有doc、jpg等
这个warc貌似只存放了页面文件而已吧。

我觉得Heritrix很直观的一点就是有控制台,但以前我忽略了这个功能,直接代码启动Heritrix,然后放在Tomcat里.后期才慢慢发现一个UI界面的价值.可以很方便的获知抓取情况,甚至完全在千里之外控制它的抓取.其实慢慢的发现很多开源框架都会有一个UI界面.我觉得这也是大势所趋.但在界面上Heritrix3.0也改动很大,以前采用JSP,所以需要Servlet容器.而Heritrix3.0则通过Rest,我现在还是没完全体会到Rest的好处.虽然在做开放平台,也要用到Rest.以后在慢慢挖掘.

界面从上而下,截图会表明以下的编号(以后补上)…

1.       Job test-job (8 launches, last 13h45m ago )

test-job job名

8 launches 载入8次

last 13h45m ago 上一次载入的时间是13h45m,也就是13小时45分钟

2.       7个按钮,build,launch,pause,unpause,checkpoint,terminate,teardown

1)         Build:从无到有创建一个抓取任务

2)         Launch:载入一个抓取任务,该抓取任务必须先存在.配置好了的话,可以在该抓取任务基础上进行增量抓取.

3)         Pause:暂停抓取任务.不会立即停止,要各个线程

4)         Unpause:重启抓取

5)         Checkpoint:如同数据库的checkpoint,备份一个抓取任务.备份时会暂停

6)         Terminate:终止抓取任务.

7)         Teardown:Heritrix3.0可以运行多个抓取任务,点击该按钮后,当前任务会从多个任务中删除.

3.       configuration: .\jobs\yunjiaoyu-dearedu\crawler-beans.cxml [edit]

点击可以修改和查看配置文件crawler-beans.cxml

4.       Job Log (more)

抓取任务运行日志,一般记录当前Job的build,launch,pause等时间.如果配置文件crawler-beans.cxml有错误,也会记录在该日志中.点击more可以查看更多.

5.       Job is Active: RUNNING

Job当前运行状态

1)         RUNNING:运行中

2)

6.       Totals
            118715 downloaded + 88955 queued = 207674 total
            11 GiB crawled (11 GiB novel, 0 B dup-by-hash, 0 B not-modified)

抓取统计,

1)         118715 downloaded:已下载的URL个数,这里的下载是获取了网页内容的URL个数,而非写入硬盘.

2)         88955 queued:队列中还等待抓取的URL个数.

3)         207674 total:一共处理的URL个数,也就是118715 downloaded+88955 queued

4)         11 GiB crawled:已获取所有网页内容的字节数

5)         11 GiB novel:所有一般网页内容字节数

6)         0 B dup-by-hash:通过URL hash去重的字节数

7)         0 B not-modified:通过http header中last modified对比,表示网页无更新.所有该网页的字节数

7.       Alerts
           none

通知,一般是一些异常信息.

8.       Rates
           1.49 URIs/sec (2.3 avg); 35 KB/sec (222 avg)

抓取速度:

1)         1.49 URIs/sec (2.3 avg):其中1.49 URIs/sec表示当前是每秒平均抓取1.49个URL, 2.3 avg是平均抓取2.3个URL

2)         35 KB/sec (222 avg):其中35 KB/sec表示当前每秒抓取35K, 222 avg表示平均抓取速度是222K/秒

9.       Load
              4 active of 50 threads; 1 congestion ratio; 20678 deepest queue; 12707 average depth

负载情况:

1)         4 active of 50 threads:50个线程里有4个是活跃的

2)         1 congestion ratio:堵塞率为1

3)         20678 deepest queue:最深的队列为20678,也就是说该队列有20678个URL

4)         12707 average depth:队列平均深度为12707

10.   Elapsed
              14h21m40s133ms

抓取用时,这里是14小时21分钟40秒133毫秒

       11. Threads
              50 threads: 44 ABOUT_TO_GET_URI, 6 ABOUT_TO_BEGIN_PROCESSOR; 44 , 6 fetchHttp

线程运行状态.

1)         50 threads: 50个线程

2)         44 ABOUT_TO_GET_URI:44个线程正在等待获取URL去抓取(温柔抓取)

3)         6 ABOUT_TO_BEGIN_PROCESSOR:6个线程开始处理

4)         44 , 6 fetchHttp:44和6号线程正在运行fetchHttp处理器

     12. Frontier
                16 URI queues: 10 active (6 in-process; 0 ready; 4 snoozed); 0 inactive; 0 ineligible; 0 retired; 6 exhausted [RUN: 0 in, 0 out]

调度器运行状态:

                    1) 16 URI queues:一共有16个队列

                    2) 10 active(6 in-process; 0 ready; 4 snoozed):有10个队列处于活动状态中,其中6个正在处理,0个正在准备,4个睡眠中(抓取过快,需要暂停响应的时间)

                   3) 0 inactive:0个处于未活动状态中

                   4) 0 ineligible:0个队列为不合格队列

                   5) 0 retired:0个队列为重试队列

                  6) 6 exhausted [RUN: 0 in, 0 out]:6个队列已经耗尽,如抓取完毕,或抓取URL限制已经达到

13.   Memory
            419129 KiB used; 989888 KiB current heap; 989888 KiB max heap

内存是使用情况:

1)         419129 KiB used:419129K正在使用

2)         989888 KiB current heap:当前为989888K

3)         989888 KiB max heap:最大为989888K

14.   Crawl Log more

对应crawl.log,记录每一个URL的运行情况.

15.   Reports

CrawlSummary Seeds Hosts SourceTags Mimetypes ResponseCode

Processors FrontierSummaryToeThreads

报表.

1)         CrawlSummary:总体情况,如已抓取种子数,URL处理数,下载数,下载字节数等

2)         Seeds:列出每个种子的抓取情况,如状态,重定向等

3)         Hosts:每个host抓取情况.如该host的URL个数,抓取字节数,剩下要抓取的URL数量等

4)         SourceTags:对应seedModule中的sourceTags配置

5)         Mimetypes:对应http-header中的Content-Type.统计不同类型的URL数,抓取字节数

6)         ResponseCode:对应http response code的统计,统计不同response code的URL个数,

7)         Processors:各个处理器链ProcessorChain中的各个处理器Processor,以及处理器处理的处理URL个数基本情况

8)         FrontierSummary:调度器报表,一般人看不懂,接下来会着重说明

9)         ToeThreads:每个线程的当前运行情况,可以看出每个URL运行到哪一步

16.   Files

Browse Job Directory

浏览当前Job下的所有文件,但只能读,不能修改.

17.   Configuration-referenced Paths

当前Job所引用的文件路径,每个文件,可以点击进去查看.

18.   Advanced

Scripting console

Browse beans

增强功能.

1)         Scripting console 脚本控制台,可以输入脚本去控制和获取Heritrix抓取,很有意思.日后会着重说明.这也是Heritrix3.0为什么一定要基于JDK6的原因.

2)         Browse beans:浏览Bean,可以动态浏览和修改每个Bean,如此也可以动态修改Heritrix的抓取.的确很强悍!

19.   Copy

Copy job to as profile

拷贝当前bean,备份需要.

可以说crawler-beans.cxml可以主导整个Heritrix的抓取.不同于Heritrix1.x版本的order.xml 是,crawler-beans.cxml采用Spring来管理.里面的配置都是一个个bean.所以无论从配置上,耦合上,动态制 上,Heritrix3.0都改进不少.下面就介绍crawler-beans.cxml中各个bean.

 1. bean id=simpleOverrides

class=org.springframework.beans.factory.config.PropertyOverrideConfigurer

字面上的意思为简单的覆盖,的确这里只是简单的覆盖.设置最基本的信息.如抓取任务名字(metadata.jobName),操作URL(metadata.operatorContactUrl),描述信息(metadata.description)

2. bean id=metadata

class=org.archive.modules.CrawlMetadata

如同simpleOverrides

3. bean id=seeds

class=org.archive.modules.seeds.TextSeedModule

种子配置,可以从文件中读取种子,也可以直接设置种子

4. bean id=scope

class=org.archive.modules.deciderules.DecideRuleSequence

URL规则控制,可以决定哪些URL要抓取,哪些URL拒绝,URL抓取深度等

5. bean id=candidateScoper

class=org.archive.crawler.prefetch.CandidateScoper

URL范围控制,通过该范围的URL Heritrix方可接受,成为CrawlURI

6. bean id=preparer

class=org.archive.crawler.prefetch.FrontierPreparer

url预处理,如设置URL的抓取深度,队列,成本控制等

 7. bean id=candidateProcessors

class=org.archive.modules.CandidateChain

处理器,引用candidateScoper去控制URL是否可以成为CrawlURI,preparer去设置深度,队列,成本控制等

8. bean id=preselector

class=org.archive.crawler.prefetch.Preselector

预先选择器,这里会过滤掉一部分URL.如blockByRegex为拒绝正则,allowByRegex为允许正则

 9. bean id=preconditions

class=org.archive.crawler.prefetch.PreconditionEnforcer

先决条件设置,如设置IP有效期,爬虫协议文件robots.txt有效期

 10. bean id=fetchDns

class=org.archive.modules.fetcher.FetchDNS

解析DNS,获得IP

11. bean id=fetchHttp

class=org.archive.modules.fetcher.FetchHTTP

核心模块,获取URL内容,设置状态

12. bean id=extractorHttp

class=org.archive.modules.extractor.ExtractorHTTP

核心模块,抽取URL,抽取出新的URL再次运行,如此爬虫才可以一直爬下去

  13. bean id=extractorHtml

class=org.archive.modules.extractor.ExtractorHTML

抽取HTML,包含JSP,ASP等,这里也会抽取JS,CSS等

14. bean id=extractorCss

class=org.archive.modules.extractor.ExtractorCSS

抽取CSS,无需单独配置,ExtractorHTML会调用

15. bean id=extractorJs

class=org.archive.modules.extractor.ExtractorJS

抽取JS,无需单独配置,ExtractorHTML会调用

Heritrix3.0新特性一大亮点就是,相比以前版本载入种子更灵活(甚至你可以动态载入种子),同时可以载入N个种子.以前版本载入种子是全部加载到内存,而一旦种子过多,那容易导致内存溢出.而新版本会分批次写入硬盘(通过调度器写入).所以避免了这个问题.下面就说一下Heritrix3.0载入种子的四种方式,分别是:直接载入,通过seeds.txt载入,通过ActionDirectory动态载入(注意是动态,你随时可以载入),自定义载入.

      1. 直接载入:
          直接载入比较方便,只需直接在crawler.beans.cxml中设置就可以,具体设置如下.

view plaincopy to clipboardprint?
  1. <bean class="org.archive.modules.seeds.TextSeedModule">
  2. <property>
  3. <bean>
  4. <property>
  5. <value>
  6. # your seeds
  7. </value>
  8. </property>
  9. </bean>
  10. </property>
  11. -->
  12. <!-- <property name='sourceTagSeeds' value='false'/> -->
  13. <!--
  14. </bean>

其中只要把your seeds替换成你想要抓取的URL即可,如http://www.yun5u.com.其中sourceTagSeeds表示是否让新抽取出来的URL记录它的种子.
     这个最方便,缺点就是如果种子太多,会使得crawler-beans.xml文件过于庞大,不美观
     

    2. 通过seeds.txt载入
      也只需要在crawler.beans.cxml中配置,同时将种子填充到seeds.txt中即可:

view plaincopy to clipboardprint?
  1. <bean class="org.archive.modules.seeds.TextSeedModule">
  2. <property>
  3. <bean>
  4. <property value="seeds.txt" />
  5. </bean>
  6. </property>
  7. <property name='sourceTagSeeds' value='false'/>
  8. </bean>

也很方便,同时保持了crawler-beans.cxml的美观.缺点其实1)也有,没有动态性,不能自定义扩展.比如想从数据库导入,甚至加上自己的属性.

      3. 通过ActionDirectory动态载入
         我觉得ActionDirectory是Heritrix3.0最有作用的新特性.因为可以动态控制抓取.比如想新增抓取的种子,想临时存放一些你不想抓取的URL,以及临时让Heritrix抓取一些URL.ActionDirectory都可以很好的满足.我想这个还是以后要着重介绍下.下面先介绍动态载入种子的适用方法:
       首先需要在crawler-beans.cxml中配置ActionDirectory:

view plaincopy to clipboardprint?
  1. <bean class="org.archive.crawler.framework.ActionDirectory">
  2. <property name="actionDir" value="action" />
  3. <property name="initialDelaySeconds" value="10" />
  4. <property name="delaySeconds" value="30" />
  5. </bean>

其中actionDir表示你的action目录,你得把动态加载的URL文件放到该目录下.默认为action,表示在Heritrix运行的目录下.
       initialDelaySeconds表示,初始化时需要延迟的时间,这里是10秒
       delaySeconds表示定时扫描actionDir的间隔时间,这里是30秒.
       其中启动actionDirectory这个bean并且运行Heritrix3.0之后,你就会在你的抓取目录下看到action这个目录.当然这里你也可以自己指定.
       随后可以生成一个文件,但必须以.seeds或.seeds(.gz)结尾.Heritrix会把以这两种文件名结尾的文件当做种子文件来处理.其中.seeds(.gz)表示压缩文件.将你的种子写入.seeds文件,如test.seeds,再放入action目录,30秒后会发现该文件转移到./action/done目录下,格式为时间.test.seeds.这个时候就表示test.seeds这个种子文件已经被加载了.你再观察下控制台,或者crawl.log就有可能发现你的种子已经被处理了.
当然,这种载入方式,你可以根据你的需要随时运行.
   

      4. 自定义载入.
        相信很多人,都有自定义载入种子的这个需求.比如从数据库中载入,或者加上自己的属性.这个就要扩展Heritrix的SeedModule了.我写了一个示例,代码如下:

+

Java代码  
  1. import java.io.File;
  2. import java.util.Vector;
  3. import org.apache.commons.httpclient.URIException;
  4. import org.archive.modules.CrawlURI;
  5. import org.archive.modules.SchedulingConstants;
  6. import org.archive.modules.seeds.SeedModule;
  7. import com.crawl.config.CrawlGlobal;
  8. import com.crawl.controller.MyHeritrixController;
  9. public class MySeedModule extends SeedModule {
  10. private static final long serialVersionUID = 1L;
  11. public static MyHeritrixController mhc=MyHeritrixController.getInstance(); // 单例模式,实现获得种子
  12. /**
  13. * 对ActionDirectory下.seeds或.seeds.gz的处理
  14. */
  15. @Override
  16. public void actOn(File f) {
  17. }
  18. /**
  19. * 添加种子,比如动态添加了种子,这里既要将其载入,又要将其记录下来
  20. */
  21. @Override
  22. public void addSeed(CrawlURI curi) {
  23. }
  24. /**
  25. * 载入种子
  26. */
  27. @Override
  28. public void announceSeeds() {
  29. Vector seeds=mhc.getSeeds(); // 获得种子,这里需要根据你的需要自己实现.
  30. String url=null;
  31. CrawlURI curi=null;
  32. try {
  33. for(int i=0; i< seeds .size();i++){ url=seeds.get(i); if(url!=null&&!url.equals("")){ curi=HeritrixUrlUtil.urlToCrawlURI(url, SchedulingConstants.MEDIUM); // 自己实现的方法,将String类型的URL转换为CrawlURI curi.setSeed(true); // 设置为种子 curi.setSourceTag(curi.toString()); // 记录该URL来源的种子URL curi.getData().put(CrawlGlobal.SITE_ID,new Integer(i) ); // 自定义属性 curi.makeHeritable(CrawlGlobal.SITE_ID); // 持久化自定义属性 curi.setForceFetch(true); // 设置为强制抓取,已经抓取过也继续抓取 publishAddedSeed(curi); // 提交种子 } } } catch (URIException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
  34. view plaincopy to clipboardprint?
  35. // HeritrixUrlUtil.urlToCrawlURI(url, SchedulingConstants.MEDIUM); 代码
  36. /**
  37. * 将字符串形式的URL转换为CrawlURI
  38. * @param url
  39. * @param priority
  40. * @return
  41. * @throws URIException
  42. */
  43. public static CrawlURI urlToCrawlURI(String url,int priority) throws URIException{
  44. if (!url.matches("[a-zA-Z][\\w+\\-]+:.*")) {
  45. url = "http://" + url;
  46. }
  47. url=url.replace("&", "&");
  48. UURI uuri=UURIFactory.getInstance(url);
  49. CrawlURI curi=new CrawlURI(uuri);
  50. curi.setSchedulingDirective(priority);
  51. return curi;
  52. }

java爬虫:Heritrix教程相关推荐

  1. JSOUP 教程—— Java爬虫,简易入门,秒杀htmlparser

    转载自 JSOUP 教程-- Java爬虫,简易入门,秒杀htmlparser 关于爬虫,之前一直用做第一个站的时候,记得那时候写的 爬虫  是爬sina 的数据,用的就是 htmlparser  可 ...

  2. Java爬虫之JSoup使用教程

    title: Java爬虫之JSoup使用教程 date: 2018-12-24 8:00:00 +0800 update: 2018-12-24 8:00:00 +0800 author: me c ...

  3. Java 爬虫 菜逼教程 00

    因为自己是个菜逼,看一些大咖们写的java爬虫跨度太大很吃力,所以本教程手把手教起. 用的是 eclipse 01.(假设你的workspace是在D盘下面,即有 D:\workspace\)首先 新 ...

  4. java爬虫教程 百度云_java视频教程java爬虫实战项目httpclient hbase springmvc solr

    资源内容: java视频教程java爬虫实战项目httpclient hbase springmvc solr|____猫了个咪-更多IT精品课程.html|____猫了个咪--it视频论坛.url| ...

  5. Java 并发/多线程教程(四)-并发模型

    本系列译自jakob jenkov的Java并发多线程教程(本章节部分内容参考http://ifeve.com/并发编程模型),个人觉得很有收获.由于个人水平有限,不对之处还望矫正! 并发系统可以有多 ...

  6. python java 爬数据_如何用java爬虫爬取网页上的数据

    当我们使用浏览器处理网页的时候,有时候是不需要浏览的,例如使用PhantomJS适用于无头浏览器,进行爬取网页数据操作.最近在进行java爬虫学习的小伙伴们有没有想过如何爬取js生成的网络页面吗?别急 ...

  7. python3爬虫入门教程-总算懂得python3.4爬虫入门教程

    Python是一款功能强大的脚本语言,具有丰富和强大的库,重要的是,它还具有很强的可读性,易用易学,非常适合编程初学者入门.以下是小编为你整理的python3.4爬虫入门教程 环境配置:下载Pytho ...

  8. java爬虫的2种爬取方式(HTTP||Socket)简单Demo(一)

    转载自 java爬虫的2种爬取方式(HTTP||Socket)简单Demo(一) 最近在找java的小项目自己写着玩,但是找不到合适的,于是写开始学一点爬虫,自己也是感觉爬虫比较有趣.这里自己找了一个 ...

  9. java爬虫自动识别验证码_简单Java爬虫(一)爬取手机号码

    原创 野狗菌 希望你能喜欢 今天 关于本文: 本文介绍一个简单Java爬虫,获取网页源码,爬取电话号码. 本篇教程用我的博客一个测试网页演示. --野狗菌[希望你能喜欢] 测试页面: https:// ...

  10. Java爬虫框架调研

    Python中大的爬虫框架有scrapy(风格类似django),pyspider(国产python爬虫框架). 除了Python,Java中也有许多爬虫框架. nutch apache下的开源爬虫程 ...

最新文章

  1. Orchard模块开发全接触3:分类的实现及内容呈现(Display)
  2. Android-JNINDK(一)入门
  3. yii2和laravel比较
  4. android中文api(85)——HorizontalScrollView
  5. CocoaAsyncSocket 套接字
  6. flash 用 html 播放,使用flash插件在HTML上播放音频
  7. 设置checkbox的只读
  8. php private ,public protected三者的区别
  9. 【每日算法Day 88】超越妹妹教你如何做这道排序题
  10. 王建林的一个亿,靠打工能实现么?
  11. ElasticSearch 5学习(2)——Kibana+X-Pack介绍使用(全)
  12. 基于protues与keli下贪吃蛇的实现
  13. 如何关闭mac的SIP
  14. 协同过滤推荐算法总结
  15. 您的Android版本不兼容,android – “你的设备与此版本不兼容”
  16. Vmware 虚拟机克隆后网卡地址的修改
  17. 精美的手机WEB网页欣赏
  18. kindle特性和硬件介绍(不介绍操作和使用方法)
  19. 从制造大国到制造强国,智能制造改变制造业未来
  20. Python之建模数值逼近篇–最小二乘拟合

热门文章

  1. 这半年没批版号了,那些手游是怎么通过广电审核这一关并成功上架的?
  2. CCNA精品学习资料汇总(学习手册+笔记+题库)
  3. nero刻录下载_Nero的3种替代品,可用于Linux CD和DVD刻录
  4. VMware创建Linux虚拟机之(三)Hadoop安装与配置及搭建集群
  5. C语言中“->”的意义
  6. 22.0:Codejock Suite Pro for ActiveX COM:Crack
  7. 22年前雷军写的代码,你见过吗?
  8. netstat 命令详解及实现原理
  9. mysql2008和mysql2000_[转载]SQL 2008到2005和2000版本的转换
  10. Linux脚本--实现自动根据名称查询进程号并杀死进程