Crawler4j在抓取后继续阻塞

时间:2015-04-15 20:38:11

标签: web-crawler blocking crawler4j

我正在使用Crawler4j从抓取的页面中获取HTML。它成功地将检索到的HTML存储到我的测试站点大约50页。它使用我实现的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)

什么可以阻止抓取工具退出?是什么写给了边境'文件夹吗

1 个答案:

答案 0 :(得分:1)

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

您提到的错误非常令人恼火,实际上是internalDB crawler4j使用的错误:BerklyDB。

Crawler4j,在内部使用前沿目录,你不应该担心或触摸它,因为它只供内部使用。

所有上述内容都说 - 我已修复该错误,您应该下载最新版本的crawler4j,其中包含我的错误修正(包括您提到的错误修正)。

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

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

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

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