有使用Crawler4j的经验吗?

我遵循the project page中的示例来实现自己的搜寻器。搜寻器工作正常,并且爬行速度非常快。唯一的是,我总是会有20-30秒的延迟。有没有办法避免等待时间?

最佳答案

刚刚检查了crawler4j source codeCrawerController.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替换为ExecutorService,其awaitTermination方法将特别方便。与睡眠不同,awaitTermination(10, TimeUnit.SECONDS)将在所有任务完成后立即返回。

关于java - 如何减少/更改抓取后的延迟?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22355130/

10-11 03:45