我已经关注文章:https://wiki.apache.org/nutch/NutchTutorial并设置了apache nutch + solr。但我想澄清我是否理解正确的nutch步骤的工作。
1)。注入:在这部分中,apache从给定的seed.txt中读取url列表,将url与regex-urlfiler正则表达式进行比较,并使用支持的URL更新crawldb。
2)。生成:bin / nutch生成crawl / crawldb爬网/段 Nutch从crawldb获取URL并创建准备获取的URL的获取列表。它需要像-topN和timegap等输入,然后在段下创建当前时间的目录。
我相信,前两步没有与互联网互动。一切都在当地发生。
问:保存提取列表在哪里?
3)。获取:bin / nutch fetch crawl / segments /
获取运行fetchList并从给定的URL中获取内容(和URL)并将其保存在某处。
问:fetch是否读取了URL的整个给定页面(文本+其他URL)? 问:Nutch在哪里提取数据?
4)。解析:bin / nutch解析crawl / segments /
它解析条目。
问:解析是什么意思? 问:我可以在哪里找到这一步的结果?
5)。 bin / nutch updatedb crawl / crawldb crawl / segments /
完成后,Nutch使用fetch的结果更新数据库。
问:它是否仅使用已解析数据或其他内容更新crawldb?
请清除我的怀疑。
答案 0 :(得分:5)
您对第一步和第二步的假设是正确的。但是,您需要了解整个工作流程的执行方式。当Nutch获取网址时,它会将网页数据或图像等数据作为二进制文件获取,并使用名为Content的类将其作为抓取数据存储到segements中。
稍后,在解析步骤中,存储的Content对象将被解析为另一种称为 ParsedData 的数据格式,其中包括数据文本及其外链(如果可用)。 ParsedData将返回到要在下一个作业批处理中处理的分段。在此步骤发出crawldb更新作业之后,此处将上一步中的链接放回到crawldb中以更新页面排名和Web链接详细信息。
在索引步骤中,来自分段的解析数据的信息被构造成字段。 Nutch使用一个名为“NutchDocument”的分类来存储结构化数据。将nutch文档放回到要在下一步中处理的段中。最后,Nutch将Nutch文档发送到索引存储,如Solr或Elasticsearch。这是最后一步,在此阶段,如果您不想再将它们发送到索引存储,则可以删除这些段。换句话说,这是数据的跟随
种子列表 - >注入网址 - >抓取项目(只是网址) - >盒内>解析数据 - > nutch文件。
我希望能回答你的一些问题。
答案 1 :(得分:1)
写下您对 inject 和 generate 的前两个步骤的答案。
我正在逐步回答您的问题: 抓取列表是在此爬网迭代中要抓取的URL的列表。您可以使用 generate.max.count 属性配置获取列表的大小。生成的提取列表存储在其相应段内的 crawl_generate 目录中。但是,您将无法以二进制形式读取它。
在生成步骤到获取步骤之后,从网络中获取获取列表中的网址。它们存储在段的 crawl_fetch 目录中。
获取网址后,将解析内容以获取出站链接,内容,元数据等。解析步骤的输出位于 crawl_parse , parse_data ,该细分的 parse_text 目录。
一旦解析完成,我们将使用来自最近获取的URL的新发现的链接来更新crawldb。 Crawldb仅包含URL和与其对应的信息,例如fetch_status,score,modified_time等。您可以将其视为存储有关URL信息的数据库。
当新的爬网迭代开始时,将从rawdb中新添加的URL插入到访存列表中,然后该过程继续进行。