Как я могу добавить URL к сканеру crawler4j в случайное время в процессе выполнения - PullRequest
0 голосов
/ 15 октября 2011

Я берусь за crawler4j.http://code.google.com/p/crawler4j/

и простое тестовое сканирование сайта прошло успешно.но я хочу добавлять URL-адреса в случайное время в процессе выполнения.

этот код показывает следующее исключение при втором построении CrawlController.Как я могу добавить URL-адреса во время прогресса?или повторно использовать CrawlController?(также не удалось повторно использовать регистр без перестройки CrawlController.)

Есть идеи?или другой хороший сканер в Java?

edit: поскольку это может быть ошибкой, я также разместил на странице crawler4j.http://code.google.com/p/crawler4j/issues/detail?id=87&thanks=87&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 Ответ

0 голосов
/ 03 января 2012

Начиная с версии 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);

Тогда вы можете добавить свои семена в цикле. Обратите внимание, что вам не нужно запускать контроллер несколько раз в цикле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...