如何解决仅将Nutch限制为种子路径及其后续网页
我已经设置了Nutch 2.x来抓取一些多语言域。我可以将Nutch限制为仅链接,而不能限制为子文件夹。例如,对于跟随种子,
我只想检索/ urdu中的URL,因为该网站还包含其他语言的网页。现在,如何配置或自定义Nutch来处理这些情况?
解决方法
Nutch没有任何默认配置可完成您的任务。
您可以调整许多流程,例如更改执行HTML解析和提取链接的插件代码(例如 parse-html,parse-tika ..等)。 (OR)更改“解析阶段映射器”代码。
(OR)
您可以在regex-urlfilter.txt中添加以下正则表达式(请注意在注入阶段禁用 Ulfilter ,因为输入的种子在URL路径中可能没有语言信息)。
-(?i).*?//.*?[/?].*?(?<=[/])(urdu)([/?.]|$).*
但是我更喜欢以下方式。
在Nutch 1.16 ..中,您可以自定义ParseOutputFormat中使用的ParseSegment代码。 Parse Reducer Phase 作为RecordWriter。
ParseOutputFormat中会发生什么?
如果您在RecordWriter Impl的 getRecordWriter方法中进行检查, 它基本上会获取给定页面上的所有 Outlinks ,并且仅选择 每页 db.max.outlinks.per.page 个URL,并使用OPIC scoring filter对其进行评分,并使用 必要的状态并将其保存到Nutch DB。 (注意:它也适用于很多 提取的页面上的过滤器,并根据您对其进行归一化 nutch-site conf默认值)
如果您在getRecordWriter中检查此特定代码行
Outlink[] links = parseData.getOutlinks(); // this returns the number of outlinks
replace the above code with some thing like this
Outlink[] links = filter(parseData.getOutlinks(),langValue);
您可以编写自定义过滤器方法。并返回其路径中没有对应的langValue的所有页面。
langValue->您可以直接对该值进行硬编码(或) 您可以在nutch-site.xml中具有属性(例如allowed.lang.per.page),并在getConf方法中读取它,并在filter方法中使用它。
如果要允许多个langValues。 然后传递,分隔的值,并在读取它们时将其拆分并相应地自定义过滤方法...
,您可以编辑conf/regex-urlfilter.txt
文件。文件底部有一条注释,表示接受其他任何内容。
如果您将+.
的显示位置更改为适合网址的正则表达式,则希望删除其他所有内容。例如,您可能想要:
+.*\/urdu\/.*
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。