我正在使用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)
什么可以阻止抓取工具退出?是什么写给了边境'文件夹吗
答案 0 :(得分:1)
您使用的是旧版本的crawler4j。
您提到的错误非常令人恼火,实际上是internalDB crawler4j使用的错误:BerklyDB。
Crawler4j,在内部使用前沿目录,你不应该担心或触摸它,因为它只供内部使用。
所有上述内容都说 - 我已修复该错误,您应该下载最新版本的crawler4j,其中包含我的错误修正(包括您提到的错误修正)。
所以请到我们的新网站: https://github.com/yasserg/crawler4j
按照安装说明(maven?) 并享受新的和非常改进的版本。
外部API几乎没有变化(只是非常轻微)。
享受新的(目前为v4.1)版本。