Heritrix源码分析(一)包介绍之前说过要分享下我的爬虫经验,但一直找不到突破口,现在才感觉写点东西真的很难,所以大家真的要感谢那些无私的前辈们,在网上留下的一篇篇可以指点迷津的文章。想了很久,还是先从Heritrix的包开始说起,然后再说类,最后讲下如何加工Heritrix,也就是将其打造成自己想要的爬虫,这里补充下,我用的版本是1.14.3.同时欢迎加入我建的Heritrix爬虫群一起讨论学习:10447185序号包名说明1org.apache.commons.httpclient封装了apache的httpclient用于Fetch网页内容2org.apache.commons.httpclient.cookie封装了apache的httpclient用于Fetch网页内容,这里主要处理Cookie3org.apache.commons.pool.impl封装了apache的httpclient用于Fetch网页内容,还待研究4org.archive.crawlerHeritrix程序运行的入口包,如Heritrix运行可以直接抓取5org.archive.crawler.adminHeritrix的管理包,比如CrawlJob表示一个抓取任务job,CrawlJobHandler管理JOB,以及日志统计等6org.archive.crawler.admin.ui服务于UI管理界面,如Job参数的设置7org.archive.crawler.datamodelHeritrix的数据模型包,如在Heritrix中代表一个URL的CandidateURI8org.archive.crawler.datamodel.credential管理Heritrix数据模型中的凭证,如抓取某些网站需要用户名和密码9org.archive.crawler.deciderulesHeritrix的规则包,如决定哪些URL可以抓取可以调度10org.archive.crawler.deciderules.recrawl还待研究,应该是决定哪些URL需要重新抓取11org.archive.crawler.event事件管理,如Heritrix的暂停、重启、停止等12org.archive.crawler.extractorHeritrix的造血器,通过它抽取新的URL再次进行抓取13org.archive.crawler.fetcherHeritrix的获取包,如获取HTTP、DNS、FTP数据14org.archive.crawler.filterHeritrix的过滤器,如配合Rule过滤一些不要的URL15org.archive.crawler.frameworkHeritrix的框架包,存放一些核心类,一般是父类,如Heritrix控制类CrawlController;调度器类Frontier16org.archive.crawler.framework.exceptionsHeritrix框架异常包,通常这里的异常抛出会导致Heritrix的停止17org.archive.crawler.frontierHeritrix的调度器,决定抓取哪个URL18org.archive.crawler.ioHeritrix的IO格式包,感觉取名不合理,这里只是定义一些格式,如统计数据的格式,错误日志的格式19org.archive.crawler.postprocessor辅助处理器包,感觉取名也不合理,这里只是对处理URL前后进行一些处理,如URL重定向20org.archive.crawler.prefetchHeritrix的预处理器包,如确定一个URL是否已经解析了DNS21org.archive.crawler.processor还没接触到,待研究22org.archive.crawler.processor.recrawl还没接触到,待研究23org.archive.crawler.scopeHeritrix抓取范围管理,如种子24org.archive.crawler.selftest管理Heritrix的Web工程self.war25org.archive.crawler.settings管理Heritrix配置文件order.xml中的各项配置26org.archive.crawler.settings.refinements管理Heritrix自己对数据格式的标准,如时间格式27org.archive.crawler.url还没怎么接触到,待研究28org.archive.crawler.url.canonicalizeHeritrix的URL规范化,用于规范每一个URL29org.archive.crawler.utilHeritrix用于抓取的工具包,如BDB操作工具,IO操作工具30org.archive.crawler.writerHeritrix的下载包,用于将抓取的URL内容写入硬盘31org.archive.extractor还没接触到,待研究32org.archive.httpclientHeritrix为结合httpclient量身打造的包,让自身更好的获取网页内容33org.archive.ioHeritrix的IO包,自己封装的一些IO操作类34org.archive.io.arc针对arc格式的IO操作包35org.archive.io.warc针对warc格式的IO操作包36org.archive.netHeritrix扩展了java.net的包,主要扩展java.net.URI类37org.archive.net.md5Heritrix对URLMD5加密包,所用不多,待研究38org.archive.net.rsync还没接触到,待研究39org.archive.net.s3还没接触到,待研究40org.archive.queue还没接触到,待研究41org.archive.uidHeritrixID管理,主要针对URI42org.archive.util整个Heritrix的工具类43org.archive.util.anvl还没接触到,待研究44org.archive.util.bdbjeHeritrix对BDB的封装45org.archive.util.fingerprint还没接触到,待研究46org.archive.util.iteratorHeritrix自身封装的迭代器47org.archive.util.ms还没接触到,待研究48st.ata.util扩展的其他包,待研究Heritrix自己的包有48个之多,还有它导入的第三方包也有30多个,可见其复杂性...Heritrix源码分析(二)配置文件order.xml介绍order.xml是整个Heritrix的核心,里面的每个一个配置都关系到Heritrix的运行情况,没读源码之前我只能从有限的渠道去获知这些配置的运用.读完之后才知道Heritrix竟然有如此灵活的运用,如可以控制抓取速度,可以优化电脑性能,可以在某一次的抓取上继续抓取.当然整个order.xml里我也没有全部掌握,只知道大部分配置的作用,希望大家指点改正以及补充,谢谢!1.meta/meta代表着该抓取JOB的元素,相当于Html的metaXml代码1.meta2.namemyheritrix/name!--Heritrix抓取JOB的名字,由用户输入,用来区分不同的抓取JOB,Heritrix没有默认值--3.descriptionmyheritrix/description!--Heritrix抓取JOB的描述,由用户输入,用来描述该抓取JOB,Heritrix没有默认值--4.operatorAdmin/operator!--Heritrix抓取JOB的操作者,由用户输入,Heritrix没有默认值--5.organization/organization!--Heritrix抓取JOB的操作者所属组织,由用户输入,Heritrix没有默认值,可以为空--6.audience/audience!--Heritrix抓取JOB的用户或客户,由用户输入,Heritrix没有默认值,可以为空--7.date20090520051654/date!--提交该Heritrix抓取JOB的时间,由系统生成--Xml代码1./meta2.controller/controller跟抓取有关的所有参数,由于内容较多,并且Heritrix也已将他们分成不同模块,所以这里我也将他们拆分来说明.Xml代码1.controller2.stringname=settings-directorysettings/string!--Heritrix的顶级目录--3.stringname=disk-path/string!--order.xml所在目录,单个Heritrix实例的目录--4.stringname=logs-pathlogs/string!--用于保存Heritrix的日志文件,可以是绝对路径,也可以是相对路径,相对路径是相对于disk-path--5.stringname=checkpoints-pathcheckpoints/string!--用于保存checkpoints(定点备份)文件的目录,可以是绝对路径,也可以是相对路径,相对路径是相对于disk-path--6.stringname=state-pathstate/string!--用于保存crawler-state文件的目录,,可以是绝对路径,也可以是相对路径,相对路径是相对于disk-path--7.stringname=scratch-pathscratch/string!--用于保存网页内容临时文件的目录,,可以是绝对路径,也可以是相对路径,相对路径是相对于disk-path--8.longname=max-bytes-download0/long!--最大下载字节数,当下载字节超出该值爬虫将停止下载。如果该值为0则表示没有限制--9.longname=max-document-download0/long!--最大文档下载数,当下载文档超出该值时爬虫将停止下载。如果该值为0则表示没有限制--10.longname=max-time-sec0/long!--最大时间抓取(秒),如果抓取时间超过该值,则爬虫将停止抓取。如果该值为0则表示没有限制--11.integername=max-toe-threads30/integer!--最大线程数用于同时处理多个URI--12.integername=recorder-out-buffer-bytes4096/integer!--每一个线程的输出缓冲区大小,也就是在内存里存放多大的字节数才写入到文件中--13.integername=recorder-in-buffer-bytes65536/integer!--每一个线程的输入缓冲区大小,也就是在内存里存放多大的字节数才写入到文件中--14.integername=bdb-cache-percent0/integer!--分配给DBB缓存堆的百分比,默认为0则表示没有其他要求(通常BDB是需要60%或者是最大值)--15.newObjectname=scopeclass=org.archive.crawler.deciderules.DecidingScope!--抓取范围,构造CrawlScope,等下拆分来说明--16./newObject17.mapname=http-headers!--HTTP协议,当处理爬虫HT