我正在设置nutch来抓取本地文件夹(samba挂载)。我遵循了this教程。
我的文件夹如下所示:
nutch@ubuntu:~$ ls /mnt/ntserver/
expansion.docx test-folder test-shared.txt
还有test-folder
下面的一些文件和文件夹。
当我运行nutch时,它不会索引文件或子文件夹。它只将一个文档放入solr,这是文件夹的索引。这是我在空的solr索引上运行nutch后得到的solr:
"response": {
"numFound": 1,
"start": 0,
"docs": [
{
"content": [
"Index of /mnt/ntserver Index of /mnt/ntserver ../ - - - expansion.docx Mon, 30 Dec 2013 14:00:42 GMT 70524 test-folder/ Fri, 17 Jan 2014 09:38:50 GMT - test-shared.txt Thu, 16 Jan 2014 11:33:42 GMT 16"
],
.....
如何让nutch索引文件和子文件夹?
编辑:如果我设置regex-urlfilter以允许所有内容(在过滤gifs,http等之后),就像这个+.
一样,那么nutch似乎会上升到文件夹层次结构,但不会向下,并且仍然只是爬行索引,而不是文件。这就是我在solr中得到的:
"response": {
"numFound": 26,
"start": 0,
"docs": [
{
"title": [
"Index of /"
]
},
{
"title": [
"Index of /bin"
]
},
...
{
"title": [
"Index of /mnt"
]
},
{
"title": [
"Index of /mnt/ntserver"
]
},
...
]
其他信息:
这是我使用的抓取命令:
apache-nutch-1.7/bin/nutch crawl -dir fileCrawl -urls apache-nutch-1.7/urls/ -solr http://localhost:8983/solr -depth 3 -topN 10000
这是我的种子网址文件的内容:
nutch@ubuntu:~$ cat apache-nutch-1.7/urls/urls_to_be_crawled.txt
file:////mnt/ntserver
这是我的regex-urlfilter.xml:
nutch@ubuntu:~$ cat apache-nutch-1.7/conf/regex-urlfilter.txt
# skip http: ftp: and mailto: urls
-^(http|ftp|mailto):
# skip image and other suffixes we can't yet parse
# for a more extensive coverage use the urlfilter-suffix plugin
-\.(gif|GIF|jpg|JPG|png|PNG|ico|ICO|css|CSS|sit|SIT|eps|EPS|wmf|WMF|zip|ZIP|ppt|PPT|mpg|MPG|gz|GZ|rpm|RPM|tgz|TGZ|mov|MOV|exe|EXE|jpeg|JPEG|bmp|BMP|js|JS|asp|ASP|xxx|XXX|yyy|YYY|cs|CS|dll|DLL|refresh|REFRESH)$
# accept any files
+.*mnt/ntserver.*
我已经包含protocol-file
并且在nutch-site.xml中对文件大小没有限制:
nutch@ubuntu:~$ cat apache-nutch-1.7/conf/nutch-site.xml
...
<property>
<name>plugin.includes</name>
<value>protocol-file|urlfilter-regex|parse-(html|tika|text)|index-(basic|anchor)|indexer-solr|scoring-opic|urlnormalizer-(pass|regex|basic)|index-more<!--|remove-empty-document|title-adder--></value>
<description></description>
</property>
<property>
<name>file.content.limit</name>
<value>-1</value>
<description> Needed to stop buffer overflow errors - Unable to read.....</description>
</property>
...
我在regex-normalize.xml中注释掉了重复的斜杠:
nutch@ubuntu:~$ cat apache-nutch-1.7/conf/regex-normalize.xml
...
<!-- removes duplicate slashes - commented out, so we won't get invalid filenames
<regex>
<pattern>(?<!:)/{2,}</pattern>
<substitution>/</substitution>
</regex>
-->
...
答案 0 :(得分:2)
调查File和FileResponse来源,我发现了以下内容:
答案 1 :(得分:0)
我发现为了抓取本地文件系统,你必须在种子URL的末尾添加斜杠,否则nutch不会将路径的最后部分标识为目录。
所以我从
改变了我的种子网址file:////mnt/ntserver
到
file:////mnt/ntserver/
然后事情有效。
更多详情:
例如,如果我的文件test.txt
位于我的/mnt/ntserver
下并且file:////mnt/ntserver
作为我的种子网址,则nutch会正确解析/mnt/ntserver
的索引,并找到有一个名为test.txt
的文件,但它会尝试获取文件/mnt/test.txt
。将尾部斜杠添加到种子网址后,将其设为file:////mnt/ntserver/
,nutch现在尝试获取文件/mnt/ntserver/test.txt
,解决了我的问题。
顺便提一下,为了阻止nutch从文件夹树向上移动到根目录,我在nutch-default.xml中将file.crawl.parent
设置为false,但也可以通过regex-urlfilter.xml来完成。 / p>