java - 提高Crawler4j-Crawler效率、可扩展性

标签 java web-crawler crawler4j

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

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

最佳答案

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

  1. b) 减少策略延迟会在网站上产生更多的爬网负载,并且可以(在小型服务器上)从长远来看增加接收时间。但是现在这不是一个常见的问题,所以 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. 页面 getter 将设置一些参数,然后使用先前设置的参数向给定 url 上的网络服务发送 HTTPget 请求。来自网络服务器的响应将被评估,一些信息如响应头和二进制形式的 html 代码将被保存。

希望我能帮到你一点。

关于java - 提高Crawler4j-Crawler效率、可扩展性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26094576/

相关文章:

java:在运行时编译继承类

golang 强制 net/http 客户端使用 IPv4/IPv6

grails - 在Groovy中使用JSoup获取mp3/pdf文件

java - 识别 wav 之间模式的算法

Java-我有一个包含对象的 ArrayList,在出现一次后我希望将该对象添加到另一个列表中

.htaccess 和谷歌抓取错误

html - 使用 Crawler4j 抓取 PDF

java - 使用crawler4j获取html页面中存在的所有iframe、base64代码

java - 如何在 db40 Java 应用程序中调试 "java.lang.NullPointerException"?

python - 看不到无限循环