Web crawler 爬网器4J在爬网后继续阻塞

Web crawler 爬网器4J在爬网后继续阻塞,web-crawler,blocking,crawler4j,Web Crawler,Blocking,Crawler4j,我使用Crawler4j只是从已爬网的页面获取HTML。它成功地为我的测试站点存储了大约50页的检索到的HTML。它使用我实现的shoudVisit方法,并使用我实现的visit方法。这两个都运行没有任何问题。文件的编写也没有问题。但在访问和存储所有页面后,它不会停止阻止: System.out.println("Starting Crawl"); controller.start(ExperimentCrawler.class, numberOfCrawlers); System.out.pr

我使用Crawler4j只是从已爬网的页面获取HTML。它成功地为我的测试站点存储了大约50页的检索到的HTML。它使用我实现的
shoudVisit
方法,并使用我实现的
visit
方法。这两个都运行没有任何问题。文件的编写也没有问题。但在访问和存储所有页面后,它不会停止阻止:

System.out.println("Starting Crawl");
controller.start(ExperimentCrawler.class, numberOfCrawlers);
System.out.println("finished crawl");
第二个
println
语句从不执行。在我的存储目标中,爬虫程序创建了一个名为“frontier”的文件夹,并将其锁定(我无法删除它,因为爬虫程序仍在使用它)

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

爬网完成约一分钟后出现错误:

java.lang.NullPointerException
位于com.sleepycat.je.Database.trace(Database.java:1816)
位于com.sleepycat.je.Database.sync(Database.java:489)
位于edu.uci.ics.crawler4j.frontier.WorkQueues.sync(WorkQueues.java:187)
位于edu.uci.ics.crawler4j.frontier.frontier.sync(frontier.java:182)
位于edu.uci.ics.crawler4j.frontier.frontier.close(frontier.java:192)
位于edu.uci.ics.crawler4j.crawler.CrawlController$1.run(CrawlController.java:232)
在java.lang.Thread.run(未知源代码)


什么会阻止爬虫退出?向“frontier”文件夹写入的内容是什么?

您使用的是旧版本的crawler4j

您提到的bug非常恼人,实际上是internalDB crawler4j使用的:BerklyDB中的一个bug

Crawler4j在内部使用frontier目录,您不必担心或触摸它,因为它只供内部使用

以上所述——我已经修复了这个bug,您应该下载最新版本的crawler4j,其中包含我的bug修复(包括您提到的很多bug修复)

因此,请访问我们的新网站:

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

外部API几乎没有变化(只是变化很小)


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

如果您觉得我的答案合适,您能接受吗?这当然是一条有用的信息,但我不想在尝试之前将答案标记为已接受。如果可能的话,我会给新版本一个机会。已经有一段时间了,所以我不再做同一个项目了。
config.setCrawlStorageFolder("/data/crawl/root");
config.setMaxDepthOfCrawling(1);
config.setPolitenessDelay(1000);
config.setMaxPagesToFetch(50);
config.setConnectionTimeout(500);