我正在使用crawler4j构建一个简单的网络爬虫。我想做的是每10分钟调用一次爬网控制。我创建了一个servlet,它在Tomcat服务器启动时启动,在servlet中,我使用ScheduledExecutorService进行调度。然而,爬网控件只为我获取一次数据(不是像我希望的那样每10分钟获取一次)。有没有更好的方法来安排我的爬行每10分钟执行一次?下面是我在servlet中的代码。
public class ScheduleControl extends HttpServlet {
private final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
@Override
public void init() throws ServletException {
final Runnable crawler = new Runnable() {
@Override
public void run() {
String[] args = {"/Users/kevin/Desktop", "7"};
try {
SaleCrawlControl.main(args);
} catch (Exception e) {
System.out.println("Exception " + e);
}
}
};
final ScheduledFuture crawlerHandle = scheduler.scheduleAtFixedRate(crawler, 0, 10, MINUTES);
scheduler.schedule(new Runnable() {
@Override
public void run() {
crawlerHandle.cancel(true);
scheduler.shutdown();
}
}, 60, MINUTES);
}
Crawler4j 3.6版及更高版本修复了该问题。我使用的是3.5版本,所以我遇到了这个问题。后来我升级到4.1版本,它开始工作了。