- <Meta>
- <name>myheritrix</name><!--Heritrix抓取JOB的名字,由用户输入,用来区分不同的抓取JOB,Heritrix没有默认值-->
- <description>myheritrix</description><!--Heritrix抓取JOB的描述,用来描述该抓取JOB,Heritrix没有默认值-->
- <operator>Admin</operator><!--Heritrix抓取JOB的操作者,Heritrix没有默认值-->
- <organization></organization><!--Heritrix抓取JOB的操作者所属组织,Heritrix没有默认值,可以为空-->
- <audience></audience><!--Heritrix抓取JOB的用户或客户,可以为空-->
- <date>20090520051654</date><!--提交该Heritrix抓取JOB的时间,由系统生成-->
- </Meta>
2.<controller></controller> 跟抓取有关的所有参数,由于内容较多,并且Heritrix也已将他们分成不同模块,所以这里我也将他们拆分来说明.
- <controller>
- <stringname="settings-directory">settings</string><!--Heritrix的顶级目录-->
- <stringname="disk-path"></string><!--order.xml所在目录,单个Heritrix实例的目录-->
- <stringname="logs-path">logs</string><!--用于保存Heritrix的日志文件,可以是绝对路径,也可以是相对路径,相对路径是相对于disk-path-->
- <stringname="checkpoints-path">checkpoints</string><!--用于保存checkpoints(定点备份)文件的目录,相对路径是相对于disk-path-->
- <stringname="state-path">state</string><!--用于保存crawler-state文件的目录,相对路径是相对于disk-path-->
- <stringname="scratch-path">scratch</string><!--用于保存网页内容临时文件的目录,相对路径是相对于disk-path-->
- <longname="max-bytes-download">0</long><!--最大下载字节数,当下载字节超出该值爬虫将停止下载。如果该值为0则表示没有限制-->
- <longname="max-document-download">0</long><!--最大文档下载数,当下载文档超出该值时爬虫将停止下载。如果该值为0则表示没有限制-->
- <longname="max-time-sec">0</long><!--最大时间抓取(秒),如果抓取时间超过该值,则爬虫将停止抓取。如果该值为0则表示没有限制-->
- <integername="max-toe-threads">30</integer><!--最大线程数用于同时处理多个URI-->
- <integername="recorder-out-buffer-bytes">4096</integer><!--每一个线程的输出缓冲区大小,也就是在内存里存放多大的字节数才写入到文件中-->
- <integername="recorder-in-buffer-bytes">65536</integer><!--每一个线程的输入缓冲区大小,也就是在内存里存放多大的字节数才写入到文件中-->
- <integername="bdb-cache-percent">0</integer><!--分配给DBB缓存堆的百分比,默认为0则表示没有其他要求(通常BDB是需要60%或者是最大值)-->
- <newObjectname="scope"class="org.archive.crawler.deciderules.DecidingScope"><!--抓取范围,构造CrawlScope,等下拆分来说明-->
- </newObject>
- <mapname="http-headers"><!--HTTP协议,当处理爬虫HTPTP协议时需要构造,等下拆分说明-->
- </map>
- <newObjectname="robots-honoring-policy"class="org.archive.crawler.datamodel.RobotsHonoringPolicy"><!--Robots.txt协议控制,等下拆分来说明-->
- </newObject>
- <newObjectname="frontier"class="org.archive.crawler.frontier.BdbFrontier"><!--Frontier调度器,等下拆分来说明-->
- </newObject>
- <mapname="uri-canonicalization-rules"><!--URL规范化规则,URL规范化规则有序列表,规则适用于从上至下列出的顺序,等下拆分来说明-->
- </map>
- <mapname="pre-fetch-processors"><!--预先处理链,在抓取前需要从网络获取或配置相关参数,等下拆分来说明-->
- </map>
- <mapname="fetch-processors"><!--获取链,等下拆分来说明-->
- </map>
- <mapname="extract-processors"><!--抽取链,等下拆分来说明-->
- </map>
- <mapname="write-processors"><!--写链,等下拆分来说明-->
- </map>
- <mapname="post-processors"><!--请求链:清理URI和在URI范围内填充新的URI,等下拆分来说明-->
- </map>
- <mapname="loggers"><!--统计跟踪链.统计跟踪模块,指定用于监视抓取和写日志,以及报告和提供信息给用户接口,等下拆分来说明-->
- </map>
- <newObjectname="credential-store"class="org.archive.crawler.datamodel.CredentialStore"><!--凭证存储,如登陆凭证,等下拆分来说明-->
- </newObject>
- </controller>
3.接下来拆分每个组件的配置文件一一进行说明,最后对Heritrix主要的配置也就是我们可以影响抓取的配置进行说明。
3.1:抓取范围<newObject name="scope" class="org.archive.crawler.deciderules.DecidingScope">
- <newObjectname="scope"class="org.archive.crawler.deciderules.DecidingScope"><!--抓取范围,构造CrawlScope-->
- <booleanname="enabled">false</boolean><!--是否运行这个组件-->
- <stringname="seedsfile">seeds.txt</string><!--种子文件名-->
- <booleanname="reread-seeds-on-config">true</boolean><!--是否每一个配置发生变法都要引发重新读取原始种子文件-->
- <newObjectname="decide-rules"class="org.archive.crawler.deciderules.DecideRuleSequence"><!--抓取范围限定的规则,由于自己一直做的是垂直抓取,没有使用以及研究它-->
- <mapname="rules"><!--不同的规则-->
- <newObjectname="rejectByDefault"class="org.archive.crawler.deciderules.RejectDecideRule"><!---->
- </newObject>
- <newObjectname="acceptIfSurtPrefixed"class="org.archive.crawler.deciderules.SurtPrefixedDecideRule"><!---->
- <stringname="decision">ACCEPT</string><!---->
- <stringname="surts-source-file"></string><!--用于推断SURT前缀的文件,文件里的任何文件将转换为所提供的SURT前缀,显示在行里的SURT前缀都会通过+开始-->
- <booleanname="seeds-as-surt-prefixes">true</boolean><!--种子文件是否也应当解析成SURT前缀-->
- <stringname="surts-dump-file"></string><!--保存SURT前缀的文件,用于实际调试SURTS时-->
- <booleanname="also-check-via">false</boolean><!--是否也检查该CrawlURI中的via-->
- <booleanname="rebuild-on-reconfig">true</boolean><!--当配置文件更改后,是否也跟着更改-->
- </newObject>
- <newObjectname="rejectIfTooManyHops"class="org.archive.crawler.deciderules.TooManyHopsDecideRule"><!---->
- <integername="max-hops">20</integer><!--最大跃点数,也就是抓取深度-->
- </newObject>
- <newObjectname="acceptIfTranscluded"class="org.archive.crawler.deciderules.TransclusionDecideRule"><!---->
- <integername="max-trans-hops">3</integer><!--除去链接L,PathFromSeed的最大长度-->
- <integername="max-speculative-hops">1</integer><!--抽取的链接X,可能是链接L或者嵌入式E,在JS里的最大个数,通过pathFromSeed判断-->
- </newObject>
- <newObjectname="rejectIfPathological"class="org.archive.crawler.deciderules.PathologicalPathDecideRule"><!---->
- <integername="max-repetitions">2</integer><!--一个URL相同目录段名最大重复次数,超过该值返回REJECT,如http://www.baidu.com/a/a/a/index.html,其中/a出现三次,超过了2次,所以返回REJECT(拒绝)-->
- </newObject>
- <newObjectname="rejectIfTooManyPathSegs"class="org.archive.crawler.deciderules.TooManyPathSegmentsDecideRule"><!---->
- <integername="max-path-depth">20</integer><!--URL中段的次数是否超过该值,超过返回REJET,段表示http://www.baidu.com/a/b,其中a和b表示一个段-->
- </newObject>
- <newObjectname="acceptIfPrerequisite"class="org.archive.crawler.deciderules.PrerequisiteAcceptDecideRule"><!---->
- </newObject>
- </map>
- </newObject>
- </newObject>
3.2: HTTP协议<map name="http-headers">
- <mapname="http-headers"><!--HTTP协议,当处理爬虫HTPTP协议时需要构造-->
- <stringname="user-agent">Mozilla/5.0(compatible;heritrix/1.14.3+http://127.0.0.1)</string><!--用户代理,这个值字段必须包含有效的URL,如此才可以用爬虫访问个人或者组织的网站-->
- <stringname="from">guoyunsky@hotmail.com</string><!--联系人信息,该字段必须包含有效的email,来代表使用本爬虫的个人或组织-->
- </map>
3.3:爬虫协议 <newObject name="robots-honoring-policy" class="org.archive.crawler.datamodel.RobotsHonoringPolicy">
- <newObjectname="robots-honoring-policy"class="org.archive.crawler.datamodel.RobotsHonoringPolicy"><!--Robots.txt协议控制-->
- <stringname="type">classic</string><!--爬虫协议类型,有classic,ignore,custom,most-favored,most-favored-set5种类型-->
- <booleanname="masquerade">false</boolean><!--我们应当在当爬虫遵循所有它声明的规则时伪装另一个代理,唯一相关的类型是:most-favored和most-favored-set-->
- <textname="custom-robots"></text><!--如果type是custom,则机器人自定义-->
- <stringListname="user-agents"><!--如果type是most-favored-set,代替的user-agents,这里列表多个-->
- </stringList>
- </newObject>
3.4:Frontier 调度器<newObject name="frontier" class="org.archive.crawler.frontier.BdbFrontier"><!-- Frontier 调度器-->
- <newObjectname="frontier"class="org.archive.crawler.frontier.BdbFrontier"><!--Frontier调度器-->
- <floatname="delay-factor">4.0</float><!--从同一个服务器(host)获取需要等待的间隔时间,可以预防无节制的抓取一个网站.通常是用该值去乘以上一个url的抓取时间来表示为下一个url需要等待的时间-->
- <integername="max-delay-ms">20000</integer><!--最大的等待时间,单位毫秒-->
- <integername="min-delay-ms">2000</integer><!--最小等待时间,单位毫秒-->
- <integername="respect-crawl-delay-up-to-secs">300</integer><!--当读取robots.txt时推迟抓取的时间,单位毫秒-->
- <integername="max-retries">30</integer><!--已经尝试失败的URI的重新尝试次数,很多人在跑Heritrix的时候,发现只跑了30个URL就停止了,其实是一个URL都没成功,它这里重试了30次-->
- <longname="retry-delay-seconds">900</long><!--默认多长时间我们重新去抓取一个检索失败的URI-->
- <integername="preference-embed-hops">1</integer><!--嵌入或者重定向URI调度等级,例如,该值为1(默认也为1),调度时将比普通的link等级高.如果设置为0,则和link一样-->
- <integername="total-bandwidth-usage-KB-sec">0</integer><!--爬虫所允许的最大宽带平均数,实际的读取速度是不受此影响的,当爬虫使用的宽带接近极限时,它会阻碍新的URI去处理,0表示没有限制-->
- <integername="max-per-host-bandwidth-usage-KB-sec">0</integer><!--爬虫允许的每个域名所使用的最大宽带数,实际的读取速度不会受此影响,当爬虫使用的宽带接近极限时,它会阻碍新的URI去处理,0表示没有限制-->
- <stringname="queue-assignment-policy">org.archive.crawler.frontier.HostnameQueueAssignmentPolicy</string><!--定义如何去分配URI到各个队列,这个类是相同的host的url就属于同一个队列-->
- <stringname="force-queue-assignment"></string><!--强制URI的队列名字,-->
- <booleanname="pause-at-start">false</boolean><!--在URI被尝试前,当爬虫启动后是否暂停?这个操作可以在爬虫工作前核实或调整爬虫。默认为false-->
- <booleanname="pause-at-finish">false</boolean><!--当爬虫结束时是否暂停,而不是立刻停止工作.这个操作可以在爬虫状态还是可用时,有机会去显示爬虫结果,并有可能去增加URI和调整setting,默认为false-->
- <booleanname="source-tag-seeds">false</boolean><!--是否去标记通过种子抓取的uri作为种子的遗传,用source值代替.-->
- <booleanname="recovery-log-enabled">true</boolean><!--设置为false表示禁用恢复日志写操作,为true时候表示你用checkpoint去恢复crawl销毁的数据-->
- <booleanname="hold-queues">true</boolean><!--当队列数量未达到时,是否不让其运行,达到了才运行。是否要去持久化一个创建的每个域名一个的URI工作队列直到他们需要一直繁忙(开始工作)。如果为false(默认值),队列会在任何时间提供URI去抓取。如果为true,则队列一开始(还有收集的url)会处于不在活动中的状态,只有在Frontier需要另外一个队列使得所有线程繁忙的时候才会让一个新的队列出于活动状态.-->
- <integername="balance-replenish-amount">3000</integer><!--补充一定的数量去使得队列平衡,更大的数目则意味着更多的URI将在它们处于等待队列停用之前将被尝试-->
- <integername="error-penalty-amount">100</integer><!--当队列中的一个URI处理失败时,需要另外处罚的数量.加速失活或问题队列,反应迟钝的网站完全退休。,默认为100-->
- <longname="queue-total-budget">-1</long><!--单个队列所允许的活动的开支,队列超出部分将被重试或者不再抓取,默认为-1,则表示没有这个限制-->
- <stringname="cost-policy">org.archive.crawler.frontier.ZeroCostAssignmentPolicy</string><!--用于计算每个URI成本,默认为UnitCostAssignmentPolicy则认为每个URI的成本为1-->
- <longname="snooze-deactivate-ms">300000</long><!--任何snooze延迟都会影响队列不活动,允许其他队列有机会进入活动状态,通常设置为比在成功获取时暂停时间长,比连接失败短,默认为5分钟-->
- <integername="target-ready-backlog">50</integer><!--准备积压队列的目标大小,这里多个队列将会进入准备状态即使线程不再等待.只有hold-queues为true才有效,默认为50-->
- <stringname="uri-included-structure">org.archive.crawler.util.BdbUriUniqFilter</string><!---->
- <booleanname="dump-pending-at-close">false</boolean><!---->
- </newObject>
3.5:URL规范化规则,主要用来规范化每个URL,用Heritrix默认的就好了,这里不做说明了,其实也是通过各种规则
3.6:预先处理链组件: <map name="pre-fetch-processors">
- <mapname="pre-fetch-processors"><!--预先处理链,在抓取前需要从网络获取或配置相关参数-->
- <newObjectname="Preselector"class="org.archive.crawler.prefetch.Preselector"><!--该组件使用的类-->
- <booleanname="enabled">true</boolean><!--是否启用该组件-->
- <newObjectname="Preselector#decide-rules"class="org.archive.crawler.deciderules.DecideRuleSequence"><!--该组件的规则,可以忽略不符合规则的URL不处理-->
- <mapname="rules"><!--该组件的规则-->
- </map>
- </newObject>
- <booleanname="override-logger">false</boolean><!--如果启用则覆盖这个类的默认日志器,默认日志器将日志打印在控制台.覆盖的日志器将把所有日志发送到在日志目录下的以本类命名的日志文件中。在heritrix.properties中设置好日志等级和日志格式,这个属性在重启后知获取一次.-->
- <booleanname="recheck-scope">true</boolean><!--是否需要在这一步重新检索CrawlScope-->
- <booleanname="block-all">false</boolean><!--指定所有的URIS(通常是由host给定)在这一步阻止-->
- <stringname="block-by-regexp"></string><!--指定允许所有在这里匹配这个正则表达式的则阻止-->
- <stringname="allow-by-regexp"></string><!--指定允许在这里所有匹配正则表达式的则允许,会对每个url都进行判断-->
- </newObject>
- <newObjectname="Preprocessor"class="org.archive.crawler.prefetch.PreconditionEnforcer"><!---->
- <booleanname="enabled">true</boolean><!---->
- <newObjectname="Preprocessor#decide-rules"class="org.archive.crawler.deciderules.DecideRuleSequence"><!---->
- <mapname="rules"><!---->
- </map>
- </newObject>
- <integername="ip-validity-duration-seconds">86400</integer><!--DNS有效的最低时间间隔(单位为秒),如果记录的DNSTTL较大,那将被用来代替,设置为0则表示永久有效-->
- <integername="robot-validity-duration-seconds">86400</integer><!--提取robots.txt信息有效时间(单位为秒),如果该设置为0则robots.txt信息永不过期-->
- <booleanname="calculate-robots-only">false</boolean><!--是否只计算一个URI的robots状态,没有任何实际应用的除外.如果该值为true,排除的url只将记录在crawl.log,但仍将抓取,默认为false(false的话,排除的url是不应该被抓取的)-->
- </newObject>
- </map>
3.7:获取组件:<map name="fetch-processors">
- <mapname="fetch-processors"><!--获取链-->
- <newObjectname="DNS"class="org.archive.crawler.fetcher.FetchDNS"><!--获取DNS使用的类-->
- <booleanname="enabled">true</boolean><!--是否启用该组件-->
- <newObjectname="DNS#decide-rules"class="org.archive.crawler.deciderules.DecideRuleSequence"><!--规则,用于忽略不符合规则的URL-->
- <mapname="rules">
- </map>
- </newObject>
- <booleanname="accept-non-dns-resolves">false</boolean><!---->
- <booleanname="digest-content">true</boolean><!--是否执行文摘(将DNS类容通过以下算法转换为指纹值,用于区别不同的DNS)-->
- <stringname="digest-algorithm">sha1</string><!--用什么算法转换指纹-->
- </newObject>
- <newObjectname="HTTP"class="org.archive.crawler.fetcher.FetchHTTP"><!--获得HTTP使用的类-->
- <booleanname="enabled">true</boolean><!--是否启用该组件-->
- <newObjectname="HTTP#decide-rules"class="org.archive.crawler.deciderules.DecideRuleSequence"><!--规则,用于忽略不符合规则的URL-->
- <mapname="rules"><!---->
- </map>
- </newObject>
- <newObjectname="midfetch-decide-rules"class="org.archive.crawler.deciderules.DecideRuleSequence"><!--适用于中间抓取规则,在我们开始去下载网页前相应header.如果最后决定拒绝,在所有内容读取之前停止抓取-->
- <mapname="rules">
- </map>
- </newObject>
- <integername="timeout-seconds">1200</integer><!--如果抓取在规定时间内(秒)没有完成,即使它还正在处理中,也是放弃。设置为0则没有这个限制,但这里不推荐设置为0,因为线程会一直等到抓取结束-->
- <integername="sotimeout-ms">20000</integer><!--如果一个Socket在规定时间内(毫秒)没有反应,则将放弃连接或者读取。这里不一定是在抓取期间立即放弃,会尝试重新连接和重新读取直到这个设置的时间到了.设置为0则没这个限制,但这里不推荐,因为Socket会无限期处理-->
- <integername="fetch-bandwidth">0</integer><!--从一个服务器抓取数据最大速度(KB/秒),0表示没有限制-->
- <longname="max-length-bytes">0</long><!--最大抓取长度,超过这个长度将被截取,0表示没有限制-->
- <booleanname="ignore-cookies">false</boolean><!--是否禁用cookie处理-->
- <booleanname="use-bdb-for-cookies">true</boolean><!--是否在BDB中保存Cookie-->
- <stringname="load-cookies-from-file"></string><!--预先载入cookie的来源文件路径-->
- <stringname="save-cookies-to-file"></string><!--当抓取结束,保存cookie的文件-->
- <stringname="trust-level">open</string><!--SSL证书信任等级,等级范围包括open(默认值,信任所有证书,包括过期,自签名,还有那些我们没有CA的)、loose(只信任自签名的证书)、normal(所有不包括自签名的证书)、strict(最严格的,证书必须有效并且DN必须匹配服务器名)-->
- <stringListname="accept-headers"><!--在每个请求里接受完整的Header,如:Accept-Language:en-->
- </stringList>
- <stringname="http-proxy-host"></string><!--代理IP设置,如果需要只能设置一个,配置这里可以使用代理IP去抓取-->
- <stringname="http-proxy-port"></string><!--代理端口设置,如果需要只能设置一个-->
- <stringname="default-encoding">GB2312</string><!--文件编码,如果没有在HttpHeader指定,将采用默认的ISO-8859-1-->
- <booleanname="digest-content">true</boolean><!--是否去执行一个正在运行中的要重试context-bodies的digesthash-->
- <stringname="digest-algorithm">sha1</string><!--去执行正在运行中的要重试context-bodies的digesthash的算法,如MS5,SHA1-->
- <booleanname="send-if-modified-since">true</boolean><!--是否发送'If-Modified-Since'header,如果上次的Last-Modified抓取历史消息在URI历史中有效-->
- <booleanname="send-if-none-match">true</boolean><!--是否发送'If-Node-Match'header,如果上次的Etag抓取历史信息在URI历史中有效-->
- <booleanname="send-connection-close">true</boolean><!--每次请求是否发送'Connection:close'header-->
- <booleanname="send-referer">true</boolean><!--每次请求是否发送'Referer'header,'Referer'header包含crawler来自哪里,在目前发现的URI页面里。'Referer'通常记录在远程服务器上,可以协助网站管理员去找出爬虫抓取了哪些特定的区域。-->
- <booleanname="send-range">false</boolean><!--是否发送'Range'header当文档尺寸最大下载字节数限制。要有礼貌的道HTTP服务器并且发送'Range'header,说明你只是对前n个字节感兴趣。如果文档尺寸最大下载字节数大于0,在'206PartialContent'相应状态里发送'Range'header,这样比只是截断超出下载字节数要好,不过很少的情况下发送'Range',将会得到'416RequestRangeNotSatisfiable'回应-->
- <stringname="http-bind-address"></string><!--连接时使用本地IP地址和域名(绑定socket),当没有指定时使用本地默认的地址-->
- </newObject>
- </map>
3.8:抽取组件<map name="extract-processors"> <!-- 抽取链 -->
- <mapname="extract-processors"><!--抽取链-->
- <newObjectname="ExtractorHTTP"class="org.archive.crawler.extractor.ExtractorHTTP"><!--抽取HTTP-->
- <booleanname="enabled">true</boolean><!--是否启用该组件-->
- <newObjectname="ExtractorHTTP#decide-rules"class="org.archive.crawler.deciderules.DecideRuleSequence"><!--规则,用于忽略不符合规则的URL-->
- <mapname="rules"><!---->
- </map>
- </newObject>
- </newObject>
- <newObjectname="ExtractorHTML"class="org.archive.crawler.extractor.ExtractorHTML"><!--抽取HTML,主要的抽取类-->
- <booleanname="enabled">true</boolean><!--是否启用该组件-->
- <newObjectname="ExtractorHTML#decide-rules"class="org.archive.crawler.deciderules.DecideRuleSequence"><!--规则,用于忽略不符合规则的URL-->
- <mapname="rules"><!---->
- </map>
- </newObject>
- <booleanname="extract-javascript">true</boolean><!--是否在Javascript里找链接,默认为true-->
- <booleanname="treat-frames-as-embed-links">true</boolean><!--如果以上值为true,FRAME/IFRAME被当做嵌入式链接(像图片,hop-type是E),否则就把他们当做导航链接,默认为true-->
- <booleanname="ignore-form-action-urls">true</boolean><!--如果为true,uri中再HTMLFORM中出现的Action属性将被忽略,默认为false-->
- <booleanname="extract-only-form-gets">true</boolean><!--如果为true,则uri中HTMLFORM中只抽取Method为get的URL,Method为post的将被忽略-->
- <booleanname="extract-value-attributes">true</boolean><!--如果为true,则抽取那些像链接的字符串,这种操作可能会抽取到有效的和无效的链接,默认为true-->
- <booleanname="ignore-unexpected-html">true</boolean><!--如果为true,则那种特殊格式的URL,比如图片将不会被扫描,默认为true-->
- </newObject>
- </map>
3.9:写组件<map name="write-processors">
- <mapname="write-processors"><!--写链-->
- <newObjectname="Archiver"class="com.steel.heritrix.extend.MyWriterMirror"><!--这里我是用的自己的写链-->
- <booleanname="enabled">true</boolean><!--是否启用该组件-->
- <newObjectname="Archiver#decide-rules"class="org.archive.crawler.deciderules.DecideRuleSequence"><!--规则,用于忽略不符合规则的URL-->
- <mapname="rules"><!---->
- </map>
- </newObject>
- <booleanname="case-sensitive">true</boolean><!--true表示操作系统区分大小写-->
- <stringListname="character-map"/><!--这是一个键值对组,用value代替key.-->
- <stringListname="content-type-map"/><!--这是一个键值对组,用value代替key-->
- <stringname="directory-file">index.html</string><!--如果给定的URL不是明确的HTML,则从这个URL去获取-->
- <stringname="dot-begin">%2E</string><!--如果一个段以.开头,则用这个值替换它。-->
- <stringname="dot-end">.</string><!--如果一个目录以.结尾,则用这个值替换它.所有的操作系统出了Windows,.是建议使用的.但Windws,%%2E才是建议的-->
- <stringListname="host-map"/><!--这是一个键值对组,如果一个host名字里匹配该key,则用value值替换它。当一个host使用多个name时这个可以保持一致性,如:[12.34.56.78www42.foo.com]-->
- <booleanname="host-directory">true</boolean><!--是否创建在url在host命名中的子目录.如www.baidu.com创建www.baidu.com这个目录,而www.baidu.com/zhidao,则在www.baidu.com目录后面再创建知道这个子目录-->
- <stringname="path">mirror</string><!--用于下载html文件的头目录-->
- <integername="max-path-length">1023</integer><!--文件系统路径最大长度-->
- <integername="max-segment-length">255</integer><!--文件系统路径中段路径的最大长度-->
- <booleanname="port-directory">false</boolean><!--在url中是否创建一个以port命名的子目录-->
- <booleanname="suffix-at-end">true</boolean><!--如果为true,则后缀放在url中查询段的后面.如果为false则放在前面-->
- <stringname="too-long-directory">LONG</string><!--如果url中目录都超过或者接近超过文件系统最大长度,超过部分它们都将用这个代替.-->
- <stringListname="underscore-set"/><!--如果一个目录名在列表里忽略大小写,那么_将放在它前面.所有的文件系统除了Windows,这个是不需要的.Windows里需要注意的是:[com1com2com3com4com5com6com7com8com9lpt1lpt2lpt3lpt4lpt5lpt6lpt7lpt8lpt9connulprn]-->
- </newObject>
- </map>
3.10:请求链组件<map name="post-processors">里面可以配置自己的调度器
- <mapname="post-processors"><!--请求链:清理URI和在URI范围内填充新的URI-->
- <newObjectname="Updater"class="org.archive.crawler.postprocessor.CrawlStateUpdater"><!---->
- <booleanname="enabled">true</boolean><!---->
- <newObjectname="Updater#decide-rules"class="org.archive.crawler.deciderules.DecideRuleSequence"><!---->
- <mapname="rules"><!---->
- </map>
- </newObject>
- </newObject>
- <newObjectname="LinksScoper"class="org.archive.crawler.postprocessor.LinksScoper"><!---->
- <booleanname="enabled">true</boolean><!---->
- <newObjectname="LinksScoper#decide-rules"class="org.archive.crawler.deciderules.DecideRuleSequence"><!---->
- <mapname="rules">
- </map>
- </newObject>
- <booleanname="override-logger">false</boolean><!--如果启用则覆盖这个类的默认日志器,默认日志器将日志打印在控制台.覆盖的日志器将把所有日志发送到
- 在日志目录下的以本类命名的日志文件中。在heritrix.properties中设置好日志等级和日志格式,这个属性在重启后知获取一次.-->
- <booleanname="seed-redirects-new-seed">true</boolean><!--如果为true,任何种子重定向的URL,同样当做一个种子对待-->
- <integername="preference-depth-hops">-1</integer><!--种子重定向urlhop等级设置.-->
- <newObjectname="scope-rejected-url-rules"class="org.archive.crawler.deciderules.DecideRuleSequence"><!---->
- <mapname="rules">
- </map>
- </newObject>
- </newObject>
- <newObjectname="Scheduler"class="com.steel.heritrix.extend.MyFrontierScheduler"><!--我自己的调度器-->
- <booleanname="enabled">true</boolean><!---->
- <newObjectname="Scheduler#decide-rules"class="org.archive.crawler.deciderules.DecideRuleSequence"><!---->
- <mapname="rules"><!---->
- </map>
- </newObject>
- </newObject>
- </map>
3.11:统计跟踪链组件<map name="loggers">
原文链接:https://www.f2er.com/xml/297636.html