#java #web-crawler
#java #веб-искатель
Вопрос:
Я обращаюсь к crawler4j. http://code.google.com/p/crawler4j /
и простой тестовый обход сайта был успешным. но я хочу добавлять URL-адреса в случайные моменты времени во время выполнения.
этот код показывает следующее исключение при втором построении CrawlController. как я могу добавлять URL-адреса во время выполнения? или повторно использовать CrawlController? (также не удалось повторно использовать случай без повторного построения CrawlController.)
есть идеи? или другой хороший искатель на Java?
редактировать: поскольку это может быть ошибка, я также разместил сообщение на странице crawler4j. http://code.google.com/p/crawler4j/issues/detail?id=87amp;thanks=87amp;ts=1318661893
private static final ConcurrentLinkedQueue<URI> urls = new ConcurrentLinkedQueue<URI>();
...
URI uri = null;
while (true) {
uri = urls.poll();
if (uri != null) {
CrawlController ctrl = null;
try {
ctrl = new CrawlController("crawler");
ctrl.setMaximumCrawlDepth(3);
ctrl.setMaximumPagesToFetch(100);
} catch (Exception e) {
e.printStackTrace();
return;
}
ctrl.addSeed(uri.toString());
ctrl.start(MyCrawler.class, depth);
}else{
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:638)
at edu.uci.ics.crawler4j.crawler.PageFetcher.startConnectionMonitorThread(PageFetcher.java:124)
at edu.uci.ics.crawler4j.crawler.CrawlController.<init>(CrawlController.java:77)
Ответ №1:
Начиная с версии 3.0, эта функция реализована в crawler4j. Пожалуйста, посетите http://code.google.com/p/crawler4j/source/browse/src/test/java/edu/uci/ics/crawler4j/examples/multiple / для примера использования.
По сути, вам нужно запустить контроллер в неблокирующем режиме:
controller.startNonBlocking(MyCrawler.class, numberOfThreads);
Затем вы можете добавить свои начальные значения в цикл. Обратите внимание, что вам не нужно запускать контроллер несколько раз в цикле.
Комментарии:
1. спасибо, Ясир. Но, используя выше, нельзя использовать setCustomData, разные для разных начальных значений?