我目前正在使用Nutch 1.7来抓取我的域名。我的问题特定于将URL编入www与非www。
的索引具体来说,在将爬网和索引触发到Solr 4.5然后使用AJAX Solr验证前端的结果后,搜索结果页面会列出“www”和“url”的结果/页面,例如:
www.mywebsite.com
mywebsite.com
www.mywebsite.com/page1.html
mywebsite.com/page1.html
我的理解是url过滤又名regex-urlfilter.txt需要修改。有没有可以建议解决方案的正则表达式/ nutch专家?
以下是pastebin上的代码。
答案 0 :(得分:1)
至少有一些解决方案。
1。)urlfilter-regex插件
如果您根本不想抓取非www页面,或者在稍后阶段(例如索引时)过滤它们,那就是urlfilter-regex插件的用途。它允许您标记与“+”开头的正则表达式模式匹配的任何URL。任何与前缀为“+”的正则表达式不匹配的内容都不会被抓取。此外,如果您要指定常规模式但排除某些URL,则可以使用“ - ”前缀指定随后要排除的URL。
在您的情况下,您将使用如下规则:
+^(https?://)?www\.
这将匹配以:
开头的所有内容https://www.
http://www.
www.
因此只允许抓取此类网址。
基于列出的URL已经没有被排除在你的regex-urlfilter之外的事实,这意味着你的nutch-site.xml中的插件没有打开,或者它没有指向该文件。
在nutch-site.xml中,你必须在插件列表中指定regex-urlfilter,例如:
<property>
<name>plugin.includes</name>
<value>protocol-httpclient|urlfilter-regex|parse-(html|tika)|index-basic|query-(basic|site|url)|response-(json|xml)|urlnormalizer-(pass|regex|basic)</value>
</property>
另外检查指定要使用哪个文件的属性不会覆盖在nutch-site.xml中,并且在nutch-default.xml中是正确的。它应该是:
<property>
<name>urlfilter.regex.file</name>
<value>regex-urlfilter.txt</value>
<description>Name of file on CLASSPATH containing regular expressions
used by urlfilter-regex (RegexURLFilter) plugin.</description>
</property>
和regex-urlfilter.txt应该在nutch的conf目录中。
还可以选择仅在不同的步骤执行过滤,例如索引时,如果您只想过滤。
2。)solrdedup命令
如果URL指向完全相同的页面,我猜测就是这里的情况,可以通过运行nutch命令删除它们以删除重复项后删除它们: http://wiki.apache.org/nutch/bin/nutch%20solrdedup
这将使用从每个索引页面的文本计算的摘要值来查找任何相同的页面,并删除除一个页面以外的所有页面。
但是,如果要特别保留“www”,则必须修改插件以更改保留的副本。
3.)编写自定义索引过滤器插件
您可以编写一个插件来读取nutch文档的URL字段,并在编制索引之前以任何方式转换它。这比使用像urlnormalize-regex这样的现有插件更灵活。
实际上很容易制作插件并将它们添加到Nutch,这是它的一大优点。作为起点,您可以复制并查看其他插件之一,包括实现IndexingFilter的nutch,例如index-basic插件。
你也可以找到很多例子: http://wiki.apache.org/nutch/WritingPluginExample http://sujitpal.blogspot.com/2009/07/nutch-custom-plugin-to-parse-and-add.html