我正在使用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)
什么可以阻止爬虫退出? 它写到"边界"文件夹的是什么?
您使用的是旧版本的 crawler4j。
你提到的错误非常令人恼火,实际上是内部数据库爬虫4j正在使用的错误:BerklyDB。
Crawler4j,在内部使用前沿目录,你不应该担心或触摸它,因为它只供内部使用。
综上所述 - 我已经修复了该错误,您应该下载最新版本的 crawler4j,其中包含我的错误修复(包括您提到的许多错误修复)。
因此,请访问我们的新网站:https://github.com/yasserg/crawler4j
按照有关安装它的说明进行操作(专家?并享受新的和非常改进的版本。
外部 API 几乎没有变化(只是非常轻微)。
享受新的(当前为 v4.1)版本。