[Crawler] Single Host Queue用处

  1. PPT讲Single Host Queue是为了控制爬取同一个网站的频率,但是后面也提到需要通过crawl history table来看是否可以再crawl这个网站。所以这个Single Host Queue好像也没法自己实现这个功能?
  2. 另外如果这个Single Host Queue只是为了把相同domain的url group起来,那URL processor其实很大程度已经是这么做了:处理一个url时抓取的大部分都是同样domain的url。
  3. URL frontier的输入输出只有Url吗?或者说Queue里面存的data都只是url吗?没有涉及到例如分配哪个region的哪几个machine去crawl某个对应的url?
  4. 总之如果没有Single Host Queue, 是否一样可以根据priority crawl网页,而且可以通过crawl history知道现在这个url是不是该crawl了?
  1. Single Host Queue 控制的爬取频率指的是保证用户满足 Politeness 要求的频率。不是指一个网站每两周爬一次这种频率。
  2. 要做到 Politeness 要求还是需要 Single Host Queue 的。
  3. URL 就可以了。分配具体 crawl 机器可以由 Back Queue Selector 可以做分发。
  4. 可以的。Single Host Queue 的作用是保证 politeness 要求,不是处理 priority。

这里我也有同样的疑问,Crawl history里面记录有上次爬取的时间戳,那这个时间戳加上Domain policy里要求爬取频率,应该就可以满足politeness的要求了吧。这样的话感觉好像不需要使用single host queue,直接把prioritize queue里的URL根据这个条件分发给fetcher不行吗?

还有一个优先级的要求,其他情况一样的前提下,热门的URL先爬。

大概明白了,如果只有一组prioritize queue的话,selector没法跳过目前还不能爬的网址吧。比如虽然这个queue里有已经可以爬的了(frequency要求满足了),但是如果queue最前面的网址还不能爬,那就只能等着了。是不是有这个问题?

我觉得这里指的是对于同一个网站不要用太多的concurrent crawling

我说的不是你们讲的这个意思。Prioritized Queues 是为了在所有能爬的网站里找到优先级最高的先爬。
https://nlp.stanford.edu/IR-book/html/htmledition/the-url-frontier-1.html

Prioritized queue我明白的,我是想知道为什么还需要使用single host queue。不过后来我想明白了single host queue的好处是一个host下的URL不用和其它host互相等待,因为每个host有不同的policy,所以如果不把URL按照host分开放队列的话,有可能在队列头上的一直需要等到符合policy条件才能被爬,这样如果同一个queue里如果有别的host的话就被迫需要等待了

嗯嗯 是这个意思。