我们一直在尝试使用爬虫,以便我们可以以一定的时间间隔爬取特定的网站。为此,我们一直在尝试将爬虫合并到计时器中。但是在使用计时器第一次成功抓取后,它总是在控制台中显示:
看起来没有线程在工作,等待 10 秒以确保...没有线程在工作,并且没有更多的 URL 在队列中等待另外 10 秒以确保...所有爬虫都已停止。完成过程......在最终清理之前等待 10 秒...... CrawlerScheduler 完成于:Wed Nov 19 18:41:36 IST 2014
对于使用计时器的每次后续爬网。爬虫不再工作。我们通过源代码找出原因,但失败了。
这是代码:
公共类 CrawlerScheduler 扩展 TimerTask {
@Override
public void run() {
try {
System.out.println("CrawlerScheduler started at:"+new Date());
int numberOfCrawlers = 1;
String crawlStorageFolder = ".";
CrawlConfig crawlConfig = new CrawlConfig();
crawlConfig.setCrawlStorageFolder(crawlStorageFolder);
PageFetcher pageFetcher = new PageFetcher(crawlConfig);
RobotstxtConfig robotstxtConfig = new RobotstxtConfig();
RobotstxtServer robotstxtServer = new RobotstxtServer(robotstxtConfig, pageFetcher);
CrawlController controller = new CrawlController(crawlConfig, pageFetcher, robotstxtServer);
controller.addSeed("http://wwwnc.cdc.gov/travel/destinations/list");
controller.start(Crawler.class, numberOfCrawlers);
System.out.println("CrawlerScheduler finished at:"+new Date());
} catch (Exception ex) {
Logger.getLogger(CrawlerScheduler.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void main(String ar[]){
TimerTask timerTask = new CrawlerScheduler();
Timer timer = new Timer();
timer.scheduleAtFixedRate(timerTask,10,6*60*1000);
try {
Thread.sleep(3000);
} catch (InterruptedException ex) {
Logger.getLogger(CrawlerScheduler.class.getName()).log(Level.SEVERE, null, ex);
}
}
}