仅限 Nutch 到种子路径及其后续网页

Restrict Nutch to Seed path and its following webpages only

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

https://www.bbc.com/urdu

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

Nutch 没有任何默认配置来完成您的任务。

有很多流程可以调整,比如更改插件代码,解析 HTML 和提取链接(如 parse-html、parse-tika[= 42=..等) (OR) 更改解析阶段映射器代码。

(或)

您可以在regex-urlfilter.txt中添加以下正则表达式(请注意在注入阶段禁用Urlfilter,因为输入种子可能没有语言信息URL 路径).

-(?i).*?//.*?[/?].*?(?<=[/])(urdu)([/?.]|$).*

但我更喜欢下面的方式。

在 Nutch 1.16 .. 中,您可以将 ParseOutputFormat which is used in ParseSegment Parse Reducer Phase 的代码自定义为 RecordWriter。

ParseOutputFormat 发生了什么?

If you check inside getRecordWriter method in RecordWriter Impl, it basically get all the Outlinks from a given page and picks only db.max.outlinks.per.page a number of URLs per page and score them using OPIC scoring filter and create CrawlDatum with the necessary status and save them Nutch DB. (note: it also applies a lot of filters on the extracted page and normalize them based on you nutch-site conf default values)

如果您检查 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); 

您可以编写自定义过滤方法。 return 所有那些在其路径中没有相应 langValue 的页面。

langValue --> 你可以直接硬编码这个值(或) 你可以在 nutch-site.xml 中有一个 属性 (like allowed.lang.per.page) 并在 getConf 方法中读取它并在里面使用它过滤方法。

如果你想允许多个 langValues。 然后传递 , 分隔值,并在读取它们时将其拆分并相应地自定义您的过滤方法...

您可以编辑 conf/regex-urlfilter.txt 文件。文件底部有一条评论说接受任何其他内容。 如果您将显示 +. 的位置更改为适合您想要的网址的正则表达式,则应删除其他所有内容。例如你可能想要: +.*\/urdu\/.*