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

时间:2022-11-04 17:09:35

开博客以及建立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.comwww.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里实现.

Heritrix源码分析(十五) 各种问题总结(转)的更多相关文章

  1. Heritrix源码分析&lpar;十五&rpar;

    开博客以及建立Heritrix 群有一段时间了(这里谢谢大家的关注),这篇博客将整理这段时间所遇到的问题.同时由于自己从今年5月份开始就不怎么接触Heritrix,很多东西开始遗忘(不过里面思想没忘) ...

  2. C&num; DateTime的11种构造函数 &lbrack;Abp 源码分析&rsqb;十五、自动审计记录 &period;Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C&num;验证码 c&num;&lowbar;生成图片式验证码 C&num; 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库

    C# DateTime的11种构造函数   别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...

  3. Heritrix源码分析&lpar;十四&rpar; 如何让Heritrix不间断的抓取(转)

    欢迎加入Heritrix群(QQ):109148319,10447185 , Lucene/Solr群(QQ) :  118972724 本博客已迁移到本人独立博客: http://www.yun5u ...

  4. Heritrix源码分析&lpar;十四&rpar;

    近段时间在搞定Lucene的一些问题,所以Heritrix源码分析暂时告一段落.今天下午在群里有同学提到了Heritrix异常终止的问题以及让Heritrix不停的抓取(就是抓完一遍后载入种子继续抓取 ...

  5. ABP源码分析十五:ABP中的实用扩展方法

    类名 扩展的类型 方法名 参数 作用 XmlNodeExtensions XmlNode GetAttributeValueOrNull attributeName Gets an   attribu ...

  6. jQuery 源码分析&lpar;十五&rpar; 数据操作模块 val详解

    jQuery的属性操作模块总共有4个部分,本篇说一下最后一个部分:val值的操作,也是属性操作里最简单的吧,只有一个API,如下: val(vlaue)        ;获取匹配元素集合中第一个元素的 ...

  7. Vue&period;js 源码分析&lpar;十五&rpar; 指令篇 v-bind指令详解

    指令是Vue.js模板中最常用的一项功能,它带有前缀v-,比如上面说的v-if.v-html.v-pre等.指令的主要职责就是当其表达式的值改变时,相应的将某些行为应用到DOM上,先介绍v-bind指 ...

  8. Heritrix源码分析&lpar;十二&rpar; Heritrix的控制中心&lpar;大脑&rpar;CrawlController&lpar;一&rpar;&lpar;转)

    本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/650694 本博客已迁移到本人独立博客: http://www.yun5u.com/ ...

  9. Heritrix源码分析&lpar;十&rpar; Heritrix中的Http Status Code&lpar;Http状态码&rpar;(转)

    本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/649737       本博客已迁移到本人独立博客: http://www.yun5u ...

随机推荐

  1. MVC4研发中遇到问题【持续总结&period;&period;&period;&period;】

    第一: 编译器错误消息: CS0012: 类型“System.Data.Objects.DataClasses.EntityObject”在未被引用的程序集中定义.必须添加对程序集 “System.D ...

  2. in&lowbar;array 的第三个参数strict设置为 true

    var_dump(in_array(0, array('s' )); 这句话的结果是bool(true). 因为in_array会将0 和's' 进行比较,0是number类型,'s'是string类 ...

  3. 转载:Struts2&plus;Jquery实现ajax并返回json类型数据

    摘要: 主要实现步骤如下: 1.JSP页面使用脚本代码执行ajax请求 2.Action中查询出需要返回的数据,并转换为json类型模式数据 3.配置struts.xml文件 4.页面脚本接受并处理数 ...

  4. android studio genymotion插件

    下载andriod studio 2.2 正式版,我的版本带SDK,一直安装, 1.在设置SDK的位置. 2.安装好后在安装虚拟机插件,genymotion去官网下载不带虚拟机的. 下载地址https ...

  5. 初步认识thymeleaf&colon;简单表达式和标签(一)

    初步认识Thymeleaf:简单表达式和标签.(一)   本文只适用于不会Java对HTML语言有基础的程序员们,是浏览了各大博客后收集整理,重新编辑的一篇文章,希望能对大家有所帮助.最后本文如果有哪 ...

  6. 机器学习入门 - Google机器学习速成课程 - 笔记汇总

    机器学习入门 - Google机器学习速成课程 https://www.cnblogs.com/anliven/p/6107783.html MLCC简介 前提条件和准备工作 完成课程的下一步 机器学 ...

  7. Cocos2d-x游戏开发之lua编辑器 Sublime 搭建,集成cocos2dLuaApi和自有类

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/wisdom605768292/article/details/34085969 Sublime Te ...

  8. python 命令行颜色

    #coding=utf-8 import ctypes,sys STD_INPUT_HANDLE = -10 STD_OUTPUT_HANDLE = -11 STD_ERROR_HANDLE = -1 ...

  9. 常用的JVM调优参数总结汇总【随时查阅学习】

    本文章参数根据后期用的参数会持续更新  --- (1)-Xms20M 表示设置JVM启动内存的最小值为20M,必须以M为单位 (2)-Xmx20M 表示设置JVM启动内存的最大值为20M,必须以M为单 ...

  10. Pychram IDE链接MySQL下更新数据的问题总结

    一.今天下午的数据库更新问题做个总结,数据更新的时候出现如下报错: Failed to retrieve routines in mysite_db.[42S02][1146] Table 'mysq ...