首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Crawler4j - NoSuchMethod getOutgoingUrls()

Crawler4j - NoSuchMethod getOutgoingUrls()
EN

Stack Overflow用户
提问于 2014-11-17 12:04:16
回答 1查看 285关注 0票数 2

我正在尝试设置craweler4j。我正在从Netbeans的来源构建它。我使用的是3.5版本的crawler4j,调用类与在站点上给出的调用类相同-为了方便地在下面复制-

代码语言:javascript
复制
public class MyCrawler extends WebCrawler {

    private final static Pattern FILTERS = Pattern.compile(".*(\\.(css|js|bmp|gif|jpe?g" 
                                                      + "|png|tiff?|mid|mp2|mp3|mp4"
                                                      + "|wav|avi|mov|mpeg|ram|m4v|pdf" 
                                                      + "|rm|smil|wmv|swf|wma|zip|rar|gz))$");

    /**
     * You should implement this function to specify whether
     * the given url should be crawled or not (based on your
     * crawling logic).
     */
    @Override
    public boolean shouldVisit(WebURL url) {
            String href = url.getURL().toLowerCase();
            return !FILTERS.matcher(href).matches() && href.startsWith("http://www.ics.uci.edu/");
    }

    /**
     * This function is called when a page is fetched and ready 
     * to be processed by your program.
     */
    @Override
    public void visit(Page page) {          
            String url = page.getWebURL().getURL();
            System.out.println("URL: " + url);

            if (page.getParseData() instanceof HtmlParseData) {
                    HtmlParseData htmlParseData = (HtmlParseData) page.getParseData();
                    String text = htmlParseData.getText();
                    String html = htmlParseData.getHtml();
                    List<WebURL> links = htmlParseData.getOutgoingUrls();

                    System.out.println("Text length: " + text.length());
                    System.out.println("Html length: " + html.length());
                    System.out.println("Number of outgoing links: " + links.size());
            }
    }

}

代码语言:javascript
复制
public class Controller {
    public static void main(String[] args) throws Exception {
            String crawlStorageFolder = "/data/crawl/root";
            int numberOfCrawlers = 7;

            CrawlConfig config = new CrawlConfig();
            config.setCrawlStorageFolder(crawlStorageFolder);

            /*
             * Instantiate the controller for this crawl.
             */
            PageFetcher pageFetcher = new PageFetcher(config);
            RobotstxtConfig robotstxtConfig = new RobotstxtConfig();
            RobotstxtServer robotstxtServer = new RobotstxtServer(robotstxtConfig, pageFetcher);
            CrawlController controller = new CrawlController(config, pageFetcher, robotstxtServer);

            /*
             * For each crawl, you need to add some seed urls. These are the first
             * URLs that are fetched and then the crawler starts following links
             * which are found in these pages
             */
            controller.addSeed("http://www.ics.uci.edu/~welling/");
            controller.addSeed("http://www.ics.uci.edu/~lopes/");
            controller.addSeed("http://www.ics.uci.edu/");

            /*
             * Start the crawl. This is a blocking operation, meaning that your code
             * will reach the line after this only when crawling is finished.
             */
            controller.start(MyCrawler.class, numberOfCrawlers);    
    }

}

在代码上成功编译,但抛出运行时异常。请建议一下。

代码语言:javascript
复制
Exception in thread "Crawler 1" java.lang.NoSuchMethodError: edu.uci.ics.crawler4j.parser.HtmlParseData.getOutgoingUrls()Ljava/util/Set;
    at MyCrawler.visit(MyCrawler.java:42)
    at edu.uci.ics.crawler4j.crawler.WebCrawler.processPage(WebCrawler.java:351)
    at edu.uci.ics.crawler4j.crawler.WebCrawler.run(WebCrawler.java:220)
    at java.lang.Thread.run(Thread.java:744)

我深入研究了代码,并在那里找到了一个同名的类。但仍然是错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-24 13:56:40

你的代码看上去不错。

您可能以某种方式进入了依赖类路径地狱--也许您有两个不同版本的crawler4j库?

无论如何,我建议如下:查看新的crawler4j github:https://github.com/yasserg/crawler4j

使用maven依赖系统,您的所有麻烦都会消失!:

代码语言:javascript
复制
<dependency>
    <groupId>edu.uci.ics</groupId>
    <artifactId>crawler4j</artifactId>
    <version>4.1</version>
</dependency>

您将获得最新版本(现在在github而不是google代码上),使用Maven,您将自动逃离所有类路径地狱.

在最新版本中,我已经修复了很多bug,所以我真的建议转移到最新和最伟大的版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26972332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档