`
guoyunsky
  • 浏览: 854748 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
3d3a22a0-f00f-3227-8d03-d2bbe672af75
Heritrix源码分析
浏览量:206333
Group-logo
SQL的MapReduce...
浏览量:0
社区版块
存档分类
最新评论

Heritrix源码分析(十五) 各种问题总结

阅读更多

本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/802721     

欢迎加入Heritrix群(QQ): 109148319 , 10447185 

 

 

     开博客以及建立Heritrix 群有一段时间了(这里谢谢大家的关注),这篇博客将整理这段时间所遇到的问题.同时由于自己从今年5月份开始就不怎么接触Heritrix,很多东西开始遗忘(不过里面思想没忘),同时目前的工作也没有必要接触Heritrix,所以不可能向之前写博客那样从源码的角度去考虑了.这里就起个抛砖引玉的作用吧,希望能有点用.这篇博客会不断更新,如有其他问题,请留言......

       相关问题:

       1.Heritrix散列30个DNS后就结束

       2.如何用Heritrix实现增量抓取,也就是抓取更新了的网页

     

      1.Heritrix散列30个DNS后就结束:

         总体来说,是30个抓取线程去获取网站数据发生交通堵塞,导致无法获取URL内容,最后都卡死在那里.
没读源码真的很难知道这个原因,好好的URL,比如 http://www.heritrix.com ,为什么变成dns:heritrix.com。而且跑上30个Heririx就停止?这里先说下为什么会 http://www.heritrix.com 会变成dns:heritrix.com.大家知道一个URL地址过去都需要通过DNS服务器获取该URL所在的地址,Heritrix也做了这个事情。所以dns:heritrix.com是去进行DNS解析,同时Heritrix会将DNS信息缓存(缓存到BDB数据库),以便下次 http://www.heritrix.com/a.html 这样的URL(同一个host下)无需再去进行类似的解析,提高效率。同时Heritrix还可以配置缓存的DNS信息的有效期,默认为6小时,见order.xml中的<integer name="ip-validity-duration-seconds">86400</integer>接下来说下为什么爬上30个dns:heritrix.com Heritrix就停止。我想你应该改了Heritrix的队列分配策略,也就是order.xml中的<string name="queue-assignmentpolicy">org.archive.crawler.frontier.HostnameQueueAssignmentPolicy</string>
默认的HostnameQueueAssignmentPolicy是以host作为抓取队列分组依据,通一个host(如以上的 www.heritrix.com www.heritrix.com/a.html )下的URL将会分配进同一个抓取队列.Heritrix通过抓取队列来实现对抓取速度的控制,以防止对一个host的过度抓取(后果很严重,可能对方会封你IP)。正常的HostnameQueueAssignmentPolicy,当你从这个host抓取完一个URL后会计算这个URL抓取的速度,同时和你所配置的抓取速度队列,如果过快,则计算该URl所需要抓取的正常时间,让其等待抓取过快的时间差值(比如按照正常配置,你每秒带宽是50K,而计算出来你抓取的是100K,则会让其等待(100-50)*抓取时间秒).则该抓取队列在该段时间内不会再排放URL,如此做到控制抓取速度.而当你采用第三方的队列分配策略,很有可能打破这种机制,比如网上流行的ELHASH,的确可以提高抓取速度.但当你种子比较少的时候,多个线程一窝蜂的去抓取少量种子就很有可能交通堵塞了,最终是大家都获取不了网页内容,如此也就抽取不出新的URL。如此一来,散列30个DNS:url后Heritrix就自动结束了.

 

    2.如何用Heritrix实现增量抓取,也就是抓取更新了的网页

      Heritrix从设计角度是一次性整站复制,所以要实现增量抓取需要改动代码。但Heritrix自身保存了判断是否增量抓取的各种参数,所以可以通过这些参数来判断是否需要增量抓取。我判断增量抓取会经过以下4个环节:

     1)判断URl是否抓取过,如抓取过跳到2)继续判断

     2)从URl的http-header里获取该URl的last-modified,context-length,http-status-code,判断是否有更新.如果有更新则表示需要更新之前的网页.但很多URL可能没有这个值,则跳转到3)

     3)该URl内容的MD5值是否更新,如果有更新,则很有可能需要抓取.但很多时候更新了也并不能代表该URl已经更新过,比如里面有广告,广告内容变化.所以进行第四步

     4)相似度分析,对他们的网页内容进行相似度分析,这个是最准确的但也是最复杂最耗性能的一步.我目前没有实现.

      有了以上4步,我们再来看如何在Heritrix里实现.

     

  更多技术文章、感悟、分享、勾搭,请用微信扫描:

分享到:
评论
10 楼 qishanghai123 2012-04-16  
楼主,如果非要改成ELFhash来提升效率,正如你提到的“多个线程一窝蜂的去抓取少量种子就很有可能交通堵塞了”,这个问题要怎么解决?
9 楼 zzzz3621 2011-12-14  
URl内容的MD5值是否更新,如果有更新,则很有可能需要抓取
那我们要对内容算出MD5值的时候不是已经把内容下载下来了呀,不然怎么算MD5?
8 楼 buyiburao 2011-03-30  
楼主我错了,请忽略掉4~7楼得问题,由于我非常傻B的自己写了一个打印的类,由于逻辑错误导致了信息只打印出来一边
7 楼 buyiburao 2011-03-29  
FrontierScheduler,line69:innerProcess
===start process===
FetchDNS,line112:innerProcess
FetchHTTP,line440:innerProcess
ExtractorHTTP,line58:innerProcess
ExtractorHTML,line567:extract
FrontierScheduler,line69:innerProcess
FrontierScheduler,line69:innerProcess
===start process===
FetchDNS,line112:innerProcess
FetchHTTP,line440:innerProcess
楼主,上面就是我打印的全部结果,为什么只打印了一遍半,而且FrontierScheduler应该是位于处理链的最后一级,怎么可能第一个先运行它呢
6 楼 buyiburao 2011-03-29  
FrontierScheduler,line69:innerProcess
===start process===
FetchDNS,line112:innerProcess
FetchHTTP,line440:innerProcess
ExtractorHTTP,line58:innerProcess
ExtractorHTML,line567:extract
FrontierScheduler,line69:innerProcess
FrontierScheduler,line69:innerProcess
5 楼 buyiburao 2011-03-29  
在抓取过程中,每个链接都会过一遍处理链吗(例如ExtractHTTP,ExtractHTML)按理说每经过一个process都会执行innerPrecess方法,但是为什么在我打印到控制台之后,类似于FetchHTTP,:innerProcess的方法只执行了一遍.真是匪夷所思啊,按理说,应该每处理一个链接就打印一遍才对。希望大神能够帮助解答一下,小弟感激不尽
4 楼 buyiburao 2011-03-29  
同志们,在抓取过程中,每个链接都会过一遍处理链吗(例如ExtractHTTP,ExtractHTML)按理说每个process都会执行innerPrecess方法,但是为什么在我打印到控制台之后,类似于FetchHTTP,:innerProcess的方法是执行了一遍.真是匪夷所思啊,按理说,应该每处理一个链接就打印一遍才对
3 楼 guoyunsky 2010-12-19  
hanyuanbo 写道
不过关于第一个问题,想问下楼主有个固定的解决方法么? 按照ELHash进行策略替换的时候,有时候会出现仍然是单线程进行抓取。貌似多试几次,会出现多线程抓取的情况。如何解决这个问题,楼主能帮下忙,解释下么??


Heritrix的机制,为了温柔抓取,不可避免还是会出现单线程情况.如果ELHASH算法里面将队列分的过多,网上流传的默认是100各,则很容易出现IP被封等情况。所以一般情况下建议还是别使用.
2 楼 hanyuanbo 2010-11-04  
不过关于第一个问题,想问下楼主有个固定的解决方法么? 按照ELHash进行策略替换的时候,有时候会出现仍然是单线程进行抓取。貌似多试几次,会出现多线程抓取的情况。如何解决这个问题,楼主能帮下忙,解释下么??
1 楼 lin405634383 2010-11-04  
楼主辛苦!

相关推荐

    heritrix源码

    这个“Heritrix源码”压缩包可能包含了Heritrix项目的完整源代码,以及相关的学习资料,对于深入理解Heritrix的工作原理、定制爬虫功能以及进行二次开发非常有帮助。以下将详细介绍Heritrix的关键知识点。 1. **...

    Heritrix源码分析

    通过对这些包的分析,我们可以看到Heritrix是一个高度模块化和可定制的爬虫。每个组件都有明确的职责,这使得Heritrix能够适应各种复杂的网络抓取需求。深入理解这些源码,有助于开发者定制自己的爬虫策略,实现特定...

    Lucene+Heritrix 源码

    **Lucene 和 Heritrix 源码分析** 在IT领域,搜索引擎的开发是一项复杂而重要的任务,它涉及到大量的文本处理、索引构建以及高效的查询算法。Lucene 和 Heritrix 是两个开源工具,分别专注于搜索的核心算法和网页...

    Heritrix 源码和Jar

    当遇到爬取失败、重复抓取、内存溢出等问题时,了解Heritrix的日志系统和调试方法,可以帮助快速定位和解决问题。 总之,Heritrix、Lucene和Dwr的组合为构建一个功能强大的网络搜索引擎提供了坚实的基础。通过深入...

    Heritrix1.14.4(含源码包)

    Heritrix 1.14.4是该软件的一个较早版本,包含了完整的源码,因此用户可以对其进行深度定制和调试。 在开始使用Heritrix 1.14.4之前,你需要了解以下几个核心知识点: 1. **爬虫基础**:Heritrix是一个Web爬虫,其...

    heritrix3.2源码

    Heritrix 3.2 源码的分析和理解有助于开发者深入掌握爬虫技术,定制自己的爬虫解决方案。 首先,让我们了解一下Heritrix 3.2 的核心特性: 1. **模块化设计**:Heritrix 3.2 采用组件化的架构,使得不同的爬取功能...

    heritrix的学习-源码分析 1-10

    ### Heritrix源码分析知识点概述 #### 一、Heritrix简介 Heritrix是一款开源的网络爬虫工具,由Internet Archive开发并维护。它主要用于网页归档和大规模网络爬取任务。Heritrix的设计理念是高度可配置性和扩展性,...

    heritrix1.14.4源码包

    heritrix1.14.4的源码包,包含heritrix1.14.4.zip和heritrix1.14.4-src.zip。heritrix是一种开源的网络爬虫,用于爬去互联网中的网页。如何配置和使用heritrix爬虫,请移步:...

    heritrix1.14.4源码+项目

    9. **社区支持**:作为开源项目,Heritrix有一个活跃的社区,用户可以在网上找到许多文档、教程和问题解答,有助于快速上手和解决问题。 这个“Heritrix1.14.4源码+项目”压缩包提供了一个深入研究和学习Heritrix的...

    开发自己的搜索引擎lucene+heritrix(第2版)(ch13-ch15源码)

    综上所述,"开发自己的搜索引擎lucene+heritrix(第2版)"的源码涵盖了从网络数据抓取到全文检索的全过程,适合开发者深入学习和实践搜索引擎技术。通过研究ch13至ch16的源代码,可以更深入地理解这两个工具的交互和...

    heritrix-1.14.4爬虫框架及源码

    源码分析对于理解Heritrix的工作原理至关重要。通过对源码的阅读,我们可以了解其内部架构,包括线程模型、数据流控制和模块间的通信机制。例如,Heritrix采用多线程设计,每个组件如fetcher、parser和archiver都在...

    Lucene 2.0+Heritrix源码【2】

    最后,"heritrixProject"很可能包含了Heritrix的配置和源码,用于自定义网络爬取的行为和范围。 总结起来,Lucene和Heritrix是构建高效网络搜索系统的关键组件。Lucene提供强大的全文索引和搜索能力,而Heritrix则...

    Heritrix源码详解

    从网上找得应该是中文Heritrix源码最详细的说明了。折腾了好久,没有把网页打成chm,只能打个exe用用。

    配置Heritrix及常见问题解决

    Heritrix是一款强大的开源网络爬虫工具,由互联网档案...总的来说,配置Heritrix涉及多个方面,从理解工作流机制到解决实际抓取过程中遇到的问题。通过深入学习和实践,可以有效地利用Heritrix构建自己的网络爬虫系统。

    很好的heritrix学习资料

    这份资料可能会涵盖Heritrix在企业环境中的具体应用,如数据收集、数据分析前的预处理步骤等,同时也可能涉及Java编程相关的知识,因为Heritrix是用Java编写的,理解其内部机制需要一定的Java基础。 "heritrix学习...

    网络爬虫Heritrix1.14.4可直接用

    总结来说,Heritrix 1.14.4是一个功能丰富的网络爬虫工具,它的模块化设计和灵活的配置使得它适合各种规模的爬虫项目。通过深入学习和实践,开发者可以掌握网络爬虫的基本原理和技术,并能够构建自己的网络数据获取...

    heritrix-3.1.0 最新jar包

    总结来说,Heritrix 3.1.0 是一款功能强大、可定制的网络爬虫工具,适用于学术研究、数据分析、网站存档等多种场景。无论是对互联网数据的需求者还是开发者,都可以通过这个jar包和源代码深入理解网络爬虫技术,并...

    heritrix-3.2.0 源码

    分析源码中的线程管理和同步机制是学习的重点。 7. **日志和调试**:理解Heritrix的日志系统,以及如何通过日志信息跟踪和调试爬虫运行过程。 **源码分析步骤** 1. **阅读项目结构**:先大致浏览项目目录,了解各...

Global site tag (gtag.js) - Google Analytics