我已经设置了 Nutch 2.x 来抓取一些多语言的域。我可以将 Nutch 限制为仅链接,但不能限制子文件夹。例如,对于跟随种子,
我只想抓取 /urdu 中的 URL,因为该网站还包含其他语言的网页。现在,我如何配置或自定义 Nutch 来处理这些情况?
我已经设置了 Nutch 2.x 来抓取一些多语言的域。我可以将 Nutch 限制为仅链接,但不能限制子文件夹。例如,对于跟随种子,
我只想抓取 /urdu 中的 URL,因为该网站还包含其他语言的网页。现在,我如何配置或自定义 Nutch 来处理这些情况?
您可以编辑该conf/regex-urlfilter.txt
文件。文件底部有一条评论,上面写着接受其他任何内容。如果您更改它对+.
适合您想要的 url 的正则表达式的位置,则应该删除其他所有内容。例如,您可能想要:
+.*\/urdu\/.*
Nutch 没有任何默认配置来完成您的任务。
您可以调整许多流程,例如更改解析 HTML 和提取链接(如parse-html、parse-tika .. 等)(或)在 Parse 阶段 Mapper 代码中更改的插件代码。
(或者)
您可以在 regex-urlfilter.txt 中添加以下正则表达式(请注意在注入阶段禁用Urlfilter,因为输入种子在 URL 路径中可能没有语言信息)。
-(?i).*?//.*?[/?].*?(?<=[/])(urdu)([/?.]|$).*
但我更喜欢以下方式。
在 Nutch 1.16 .. 你可以自定义 ParseOutputFormat 的代码,ParseSegment Parse Reducer Phase中使用的ParseOutputFormat 代码作为 RecordWriter。
ParseOutputFormat 中会发生什么?
如果您在 RecordWriter Impl 中检查 getRecordWriter 方法,它基本上会从给定页面获取所有外链接,并且只选择 db.max.outlinks.per.page每页的一些 URL,并使用OPIC 评分过滤器对它们进行评分,并使用必要的状态并保存它们 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。然后传递,分隔值,并在读取它们时将其拆分并相应地自定义您的过滤器方法...