如何在进度期间随机将URL添加到crawler4j的爬虫程序中

时间:2011-10-15 05:02:46

标签: java web-crawler

我正在寻找crawler4j。 http://code.google.com/p/crawler4j/

并且简单的测试抓取网站成功了。 但我希望在进行过程中随机添加网址。

此代码在第二次构建CrawlController时显示以下异常。 如何在进度期间添加URL?或重用CrawlController? (也重用案例而不重新构建CrawlController失败。)

任何想法? 或其他Java中的好爬虫?

编辑: 因为它可能是一个bug,我也发布到了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 :(得分:0)

从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);

然后你可以循环添加你的种子。请注意,您不需要在循环中多次启动控制器。