2013-03-14 37 views
6

Tôi đang cố gắng sử dụng ví dụ về trình thu thập thông tin cơ bản trong trình thu thập thông tin4j. Tôi lấy mã từ trang web crawler4j here.Tại sao ví dụ về trình thu thập thông tin đưa ra lỗi?

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

Phía trên là mã cho lớp trình thu thập thông tin từ ví dụ.

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

Phía trên là lớp dành cho lớp trình điều khiển cho trình thu thập dữ liệu web. Khi tôi cố gắng chạy lớp điều khiển từ IDE của tôi (Intellij) tôi nhận được lỗi sau:

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

Có điều gì đó về cấu hình maven được tìm thấy here mà tôi nên biết? Tôi có phải sử dụng một phiên bản khác không?

+1

Từ âm thanh của nó, bạn đang cố gắng thực thi một phiên bản của mã được biên dịch trên phiên bản Java mới hơn, sau đó là phiên bản bạn đang chạy. Ví dụ. Mã này được biên dịch bằng Java 7 và Java 6 đang chạy của bạn hoặc nó được biên dịch bằng Java 6 và bạn đang chạy Java 5 ... – MadProgrammer

+0

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

+0

@hey j.jerrod taylor..Tôi đang đối mặt với vấn đề trong chương trình rất cơ bản.i đang nhận được ngoại lệ Ngoại lệ trong chuỗi "main" java.lang.NoClassDefFoundError: org/apache/http/client/methods/HttpUriRequest \t tại com.crawler.web.BasicCrawlController.main (BasicCrawlController.java:78) Gây ra bởi: java.lang.ClassNotFoundException: org.apache.http.client.methods.HttpUriRequest, Vui lòng đề nghị nếu bất kỳ Jar khác là cũng được yêu cầu. –

Trả lời

1

Sự cố không phải với trình thu thập thông tin4j. Vấn đề là phiên bản Java mà tôi đang sử dụng khác với phiên bản Java mới nhất được sử dụng trong crawler4j. Tôi đã chuyển phiên bản ngay trước khi chúng được cập nhật lên Java 7 và mọi thứ hoạt động tốt. Tôi đoán rằng việc nâng cấp phiên bản Java của tôi lên 7 sẽ có cùng tác dụng.

+0

tôi sẽ thu thập dữ liệu trang web động bằng cách sử dụng trình thu thập thông tin4j (java). http://stackoverflow.com/questions/27264931/crawling-dynamic-website-using-java?noredirect=1#comment43002565_27264931 – BasK

Các vấn đề liên quan