2013-03-14 1 views
6

私は、crawler4jで基本クローラーの例を使用しようとしています。私はcrawler4jのウェブサイトhereからコードを取った。crawler4jの例でエラーが発生するのはなぜですか?

package edu.crawler; 

import edu.uci.ics.crawler4j.crawler.Page; 
import edu.uci.ics.crawler4j.crawler.WebCrawler; 
import edu.uci.ics.crawler4j.parser.HtmlParseData; 
import edu.uci.ics.crawler4j.url.WebURL; 
import java.util.List; 
import java.util.regex.Pattern; 
import org.apache.http.Header; 

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) { 
      int docid = page.getWebURL().getDocid(); 
      String url = page.getWebURL().getURL(); 
      String domain = page.getWebURL().getDomain(); 
      String path = page.getWebURL().getPath(); 
      String subDomain = page.getWebURL().getSubDomain(); 
      String parentUrl = page.getWebURL().getParentUrl(); 
      String anchor = page.getWebURL().getAnchor(); 

      System.out.println("Docid: " + docid); 
      System.out.println("URL: " + url); 
      System.out.println("Domain: '" + domain + "'"); 
      System.out.println("Sub-domain: '" + subDomain + "'"); 
      System.out.println("Path: '" + path + "'"); 
      System.out.println("Parent page: " + parentUrl); 
      System.out.println("Anchor text: " + anchor); 

      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()); 
      } 

      Header[] responseHeaders = page.getFetchResponseHeaders(); 
      if (responseHeaders != null) { 
        System.out.println("Response headers:"); 
        for (Header header : responseHeaders) { 
          System.out.println("\t" + header.getName() + ": " + header.getValue()); 
        } 
      } 

      System.out.println("============="); 
    } 
} 

上記の例のクローラクラスのコードです。

public class Controller { 

    public static void main(String[] args) throws Exception { 
      String crawlStorageFolder = "../data/"; 
      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); 
    } 
} 

上記は、Webクローラのコントローラクラスのクラスです。 私は私のIDE(のIntelliJ)からControllerクラスを実行しようとすると、私は次のエラーを取得する:

Exception in thread "main" java.lang.UnsupportedClassVersionError: edu/uci/ics/crawler4j/crawler/CrawlConfig : Unsupported major.minor version 51.0 

は、私が知っておくべきhereを発見されたMavenの設定についての何かはありますか?別のバージョンなどを使用する必要がありますか?

+1

そのサウンドから、Javaの新しいバージョンでコンパイルされたコードを実行しようとしています。例えば。コードはJava 7と実行中のJava 6でコンパイルされました。またはJava 6でコンパイルされ、Java 5が実行されています。 – MadProgrammer

+0

http://stackoverflow.com/questions/10382929/unsupported-major-minor-version -51-0 – Farlan

+0

@hey j.jerrod taylor ..私は非常に基本的なプログラムの問題に直面しています。スレッド "main"で例外が発生していますjava.lang.NoClassDefFoundError:org/apache/http/client/methods/HttpUriRequest \t com.crawler.web.BasicCrawlController.main(BasicCrawlController.java:78) 原因:java.lang.ClassNotFoundException:org.apache.http.client.methods.HttpUriRequest、他のJarがあるかどうかをご確認くださいまた必要です。 –

答えて

1

問題はcrawler4jでは発生しませんでした。問題は、使用していたJavaのバージョンが、crawler4jで使用されているJavaの最新バージョンと異なることです。 Java 7にアップデートする前にバージョンを切り替えて、すべて正常に動作しました。私はJavaの私のバージョンを7にアップグレードすると同じ効果があると思います。

+0

は、crawler4j(java)を使用して動的Webサイトをクロールする必要があります。 http://stackoverflow.com/questions/27264931/crawling-dynamic-website-using-java?noredirect=1#comment43002565_27264931 – BasK

関連する問題