【问题标题】:Crawler4j keeps blocking after crawlCrawler4j 爬完后一直阻塞
【发布时间】:2015-04-15 20:38:10
【问题描述】:

我正在使用 Crawler4j 来简单地从抓取的页面中获取 HTML。它成功地为我的测试站点存储了大约 50 页的检索到的 HTML。它使用我实现的shoudVisit 方法,它使用我实现的visit 方法。这些都运行没有任何问题。文件也写入没有问题。但是在所有页面都被访问和存储之后,它并没有停止阻塞:

System.out.println("Starting Crawl");
controller.start(ExperimentCrawler.class, numberOfCrawlers);
System.out.println("finished crawl");

第二个println 语句永远不会执行。在我的存储目标中,爬虫创建了一个名为“frontier”的文件夹,它持有锁定(我无法删除它,因为爬虫仍在使用它)。

这是我给它的配置设置(尽管我设置的设置似乎并不重要):

config.setCrawlStorageFolder("/data/crawl/root");
config.setMaxDepthOfCrawling(1);
config.setPolitenessDelay(1000);
config.setMaxPagesToFetch(50);
config.setConnectionTimeout(500);

抓取完成后大约一分钟出现错误:

java.lang.NullPointerException at com.sleepycat.je.Database.trace(Database.java:1816) at com.sleepycat.je.Database.sync(Database.java:489) at edu.uci.ics.crawler4j.frontier.WorkQueues.sync(WorkQueues.java:187) at edu.uci.ics.crawler4j.frontier.Frontier.sync(Frontier.java:182) at edu.uci.ics.crawler4j.frontier.Frontier.close(Frontier.java:192) at edu.uci.ics.crawler4j.crawler.CrawlController$1.run(CrawlController.java:232) at java.lang.Thread.run(Unknown Source)

是什么阻止了爬虫退出?它在“frontier”文件夹中写入了什么?

【问题讨论】:

  • 如果你觉得我的回答合适你能接受吗?
  • 这当然是一条有用的信息,但我不想在尝试之前将答案标记为已接受。我会尽可能给新版本一个机会。已经有一段时间了,所以我不再从事同一个项目。

标签: web-crawler blocking crawler4j


【解决方案1】:

您使用的是旧版本的 crawler4j。​​

你说的这个bug很烦人,实际上是internalDB crawler4j正在使用的一个bug:BerklyDB。

Crawler4j,内部使用frontier目录,你不必担心或触摸它,因为它仅供内部使用。

以上所有内容 - 我已经修复了该错误,您应该下载最新版本的 crawler4j,其中包含我的错误修复(很多错误修复,包括您提到的错误修复)。

所以请访问我们的新网站: https://github.com/yasserg/crawler4j

按照有关安装它的说明进行操作(maven?) 并享受新的和非常改进的版本。

外部 API 几乎没有变化(只是非常轻微)。

享受新的(当前为 v4.1)版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-30
    • 2010-12-04
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    相关资源
    最近更新 更多