我在看donne martin's design for a web crawler。
在“避免重复”部分中,他描述了他认为可以用来避免爬网时出现循环和无限循环的机制:
For smaller lists we could use something like sort | unique
With 1 billion links to crawl, we could use MapReduce to output only entries that have a frequency of 1
这是什么意思?假设我所有的爬虫都在redis集中维护了一个
links_to_crawl
列表,并在我的hadoop中维护了一个crawled_links
列表。他们不断从links_to_crawl
中删除新链接,然后将来自该URL的传出链接也放入links_to_crawl
中,对吗?他们何时会通过MapReduce作业查询crawled_links
?他们将链接插入links_to_crawl
之前是否需要检查每个链接? MR工作怎么样?
最佳答案
we could use MapReduce to output only entries that have a frequency of 1
您在此实例中没有Redis或集合。您所拥有的只是标准的“wordcount”算法,您碰巧正在对URL进行分组并过滤出具有多个结果的值。
在Hadoop方面,您可以引用原始的Nutch项目进行网络爬网
关于hadoop - 处理重复项并避免在爬网时出现周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60479468/