本博客属原创文章,转载请注明出处: http://guoyunsky.iteye.com/blog/1744456

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. }

Heritrix3.0相关推荐

  1. 估算带卷积核二分类0,3的网络的收敛时间和迭代次数

    制作一个网络分类minst的0和3求出这网络的迭代次数曲线表达式n(δ),和准确率表达式p-max(δ),用预期准确率去估算n,并推算需要的时间. 将minst的28*28的图片缩小到9*9,网络用一 ...

  2. heritrix 相关

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  3. java爬虫:Heritrix教程

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

  4. 神经网络收敛标准与准确率之间的数学关系

    制作一个带一个3*3卷积核的神经网络,测试集是minst的0和2图片集,将28*28的图片缩小成9*9,隐藏层30个节点所以网络的结构是 S(minst0)-(con3*3)49-30-2-(1,0) ...

  5. 用共振频率去进行图片分类的尝试

    假设有一种物质,这种物质的原子核的质子数和电子数可以不同,允许质子的带电量不同,并且质子带负电,同时这个原子的电子不满足鲍利不相容原理,环境温度是 (1/1.3806505)*10^23k,电子波的频 ...

  6. 收敛标准对迭代次数影响

    制作一个n*n的网络,将收敛标准分别设定在,0.001,0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.1,观察网络达到平衡时迭代次数的变化. 比如如图的 ...

  7. vue省市区三级联动mysql,js/json,html/jsp

    大家好,我是烤鸭: 省市区三级联动数据及页面: 测试的时候,发现少了几个地区,现在补上了,也优化了下排版. 如果你懒得复制和看的话,这里是打包的下载地址. 之前的资源地址也改了,http://down ...

  8. ZAM 3D 制作3D动画字幕 用于Xaml导出

    ZAM 3D 制作3D动画字幕 用于Xaml导出 原文:ZAM 3D 制作3D动画字幕 用于Xaml导出 原地址-> http://www.cnblogs.com/yk250/p/5662788 ...

  9. 将执行文件转化为bat批处理文件的工具(批处理文件方式提供)

    update 2006.4.25 15:20 支持64kb以上的执行文件/// @echo e 0100 4d 5a 90 0 3 0 0 0 4 0 0 0 ff ff 0 0 >>Da ...

最新文章

  1. Pycharm安装pip pip安装第三方模块
  2. 深入理解 JVM Class文件格式(七)
  3. el-input 输入框类型;只能输入数字的输入框;保留两位小数输入框;只能输入正整数和0的输入框;手机号正则校验;车牌号码正则校验
  4. Android访问瓦片地图 费流量,瓦片地图服务在线资源访问总结
  5. python用户界面画图_通过海龟绘图学习Python-01
  6. 找寻创业赛事活动有哪些靠谱的创业赛事平台?
  7. 时间日期、查找、压缩类
  8. Dedecms之SQL语句修改和调用数据总结
  9. mysql双主配置及其注意事项
  10. NLPIR汉语分词(Java调用 使用IDEA )
  11. C++洛谷题解(1)
  12. android烧写固定MAC,小系统SN号和MAC地址快速烧录的方法与流程
  13. 思科交换机接口配置trunk_cisco交换机vlan-trunk的配置详解及应用实例
  14. 2019年计算机类毕业设计论文题目推荐
  15. 基于OBD系统的量产车评估测试(PVE),你知多少?
  16. 任正非《一江春水向东流》读后感
  17. 脚本工作室对游戏的危害
  18. 轻雀协作客户最佳实践之凯叔讲故事
  19. 文化先锋A6客户端自动登陆
  20. python package for Regime switching model 马尔可夫区制转换模型代码

热门文章

  1. 简要回答信息技术的发展中经历的五次重大变革。
  2. CSDN的积分如何获取
  3. 2022-2028全球军用级电源行业调研及趋势分析报告
  4. ST电机库v5.4.4源代码分析(1): FOC原理(结合ST电机库)
  5. idea调整代码标签编辑器标签editor tabs的横排和竖排
  6. Linux如何创建快捷方式
  7. python遗传算法有多慢_python遗传算法的优化过程是什么?
  8. Pspice17.2绘制原理图
  9. OPC读写Kepware(C++)
  10. Unity经典游戏教程之:弓之骑士