特定の間隔で特定の Web サイトをクロールできるように、クローラーを使用しようとしています。このために、タイマーにクローラーを組み込むことを試みてきました。ただし、タイマーを使用して最初にクロールが成功した後は、常にコンソールに次のように表示されます。
確認するために 10 秒間待機しているスレッドが機能していないようです... 確認するためにさらに 10 秒間待機しているスレッドが機能しておらず、これ以上の URL がキューにありません... すべてのクローラーが停止しています。プロセスを終了しています...最終的なクリーンアップの前に 10 秒間待機しています...
タイマーを使用した後続のすべてのクロール。クローラーが再び機能しなくなりました。ソースコードを調べて原因を突き止めましたが、失敗しました。
コードは次のとおりです。
public class CrawlerScheduler extends 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);
}
}
}