1

我正在使用 Crawler4j 爬虫爬取一些域。现在我想提高爬虫的效率,我希望我的爬虫在给定的时间段内使用我的全部带宽并爬取尽可能多的 url。为此我正在采取以下措施设置: -

  • 我增加了编号。爬虫线程数为 10(使用此函数 ContentCrawler('classfilename',10);)
  • 我已将礼貌延迟减少到 50 毫秒(使用 Crawlconfig.setpolitenessdelay(50);)
  • 我将爬行深度设为 2(使用 Crawlconfig.setMaxDepthOfCrawling(2))

现在我想知道的是:-

1) 这种设置是否有任何副作用。

2)除此之外我还有什么需要做的,这样我才能提高我的爬虫速度。

3) 有人能告诉我每个设置的最大限制吗(例如:- crawler4j 一次支持的最大线程数等)。因为我已经浏览了 Crawler4j 的代码,但我在任何地方都没有找到任何限制。

4)如何在不检查它的robots.txt文件的情况下抓取一个域。因为我知道crawler4j在抓取之前首先检查一个域的robots.txt文件。我不想要那个!

5)page fetcher是如何工作的(请简单解释一下)

任何帮助表示赞赏,如果问题很愚蠢,请放轻松。

4

1 回答 1

3

我会尽力在这里帮助你。我不能保证正确性和完整性。

  1. b) 减少 politness 延迟将在站点上创建更多的爬网负载,并且可以(在小型服务器上)长期增加接收时间。但是现在这不是一个普遍的问题,所以 50ms 应该还是可以的。另请注意,如果从网络服务器接收响应需要 250 毫秒,则该线程抓取下一页仍需要 250 毫秒。

    c)我不太确定通过将 crawlDepth 设置为 2 来实现什么。例如,从 1 开始的爬行深度意味着您爬行种子,而不是爬行在种子上找到的每个站点,然后停止。(crawlDepth = 2 只会更进一步,依此类推)。这不会影响您的抓取速度,只会影响您的抓取时间和找到的页面。

  2. 不要在 CrawlerThread 及其涵盖的所有方法/类中执行时间繁重的操作。在最后或在额外的线程中执行它们。

  3. 爬虫配置本身没有限制。限制将由您的 CPU(不太可能)或要抓取的站点的结构(很可能)设置。

  4. 将此行添加到您的 CrawlController:robotstxtConfig.setEnabled(false);

现在应该是这样的:

PageFetcher pageFetcher = new PageFetcher(config);
RobotstxtConfig robotstxtConfig = new RobotstxtConfig();
robotstxtConfig.setEnabled(false);
RobotstxtServer robotstxtServer = new RobotstxtServer(robotstxtConfig, pageFetcher);
CrawlController controller = new CrawlController(config, pageFetcher, robotstxtServer);
  1. 页面获取器将设置一些参数,然后使用之前设置的参数在给定的 url 上向 web 服务发送 HTTPget 请求。将评估来自网络服务器的响应,并保存一些信息,例如响应标头和二进制形式的 html 代码。

希望我能帮到你一点。

于 2014-10-06T11:23:47.850 回答