是否有人会经历使用crawler4j?
我遵循项目页面中的示例,以实现自己的爬行者。爬行者工作正常,爬行非常快。唯一的事情是我总是延迟20-30秒。有没有办法避免等待时间?
刚刚检查了crawler4j源代码。crawercontroller.start方法有很多固定的10秒"暂停",以确保完成线程并准备好清理。
// Make sure again that none of the threads
// are
// alive.
logger.info("It looks like no thread is working, waiting for 10 seconds to make sure...");
sleep(10);
// ... more code ...
logger.info("No thread is working and no more URLs are in queue waiting for another 10 seconds to make sure...");
sleep(10);
// ... more code ...
logger.info("Waiting for 10 seconds before final clean up...");
sleep(10);
另外,主循环每10秒检查一次,以了解是否完成了爬行线:
while (true) {
sleep(10);
// code to check if some thread is still working
}
protected void sleep(int seconds) {
try {
Thread.sleep(seconds * 1000);
} catch (Exception ignored) {
}
}
因此,可以微调这些电话并减少睡眠时间。
更好的解决方案,如果您可以节省一些时间,那就是重写此方法。我将用执行人员服务替换List<Thread> threads
,其等待方法将特别方便。与睡眠不同,如果完成所有任务,awaitTermination(10, TimeUnit.SECONDS)
将立即返回。