0

我已经设置了 Nutch 2.x 来抓取一些多语言的域。我可以将 Nutch 限制为仅链接,但不能限制子文件夹。例如,对于跟随种子,

https://www.bbc.com/urdu

我只想抓取 /urdu 中的 URL,因为该网站还包含其他语言的网页。现在,我如何配置或自定义 Nutch 来处理这些情况?

4

2 回答 2

2

您可以编辑该conf/regex-urlfilter.txt 文件。文件底部有一条评论,上面写着接受其他任何内容。如果您更改它对+.适合您想要的 url 的正则表达式的位置,则应该删除其他所有内容。例如,您可能想要: +.*\/urdu\/.*

于 2020-09-17T15:11:17.583 回答
2

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。然后传递,分隔值,并在读取它们时将其拆分并相应地自定义您的过滤器方法...

于 2020-09-17T12:35:42.750 回答