【问题标题】:Improving Crawler4j-Crawler efficiency,scalabitlity提高 Crawler4j-Crawler 效率、可扩展性
【发布时间】:2014-11-23 12:45:45
【问题描述】:

我正在使用 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 是如何工作的(请简单解释一下)

感谢您的任何帮助,如果问题很愚蠢,请放轻松。

【问题讨论】:

    标签: java web-crawler crawler4j


    【解决方案1】:

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

    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 代码等信息。

    希望能帮到你。

    【讨论】:

    • 感谢 Tobias 的回答。你已经回答了我的大部分问题,而且效果很好。但我不明白你的 2) 答案。这个能不能解释的更清楚。
    • 对 1.c 的解释:- 是的,你说的完全正确。我们完成域爬取的速度取决于爬取的深度。那就是你我也提到过!
    • 如果你开始爬取,你的爬虫会启动自己,从数据库中获取一些 URL,开始获取一个,解析这个,然后在某个时候进入 'visit(Page page)' 方法你Crawler.class。您不应该实现任何像 I/O 或其他代码这样在整个爬网过程中需要很长时间的东西,因为这会阻塞您的爬虫线程。此外,您不应将复杂对象添加到爬虫内部使用的类中,例如 WebURL 或 Page。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    相关资源
    最近更新 更多