2013-03-14 30 views
6

Temel tarayıcısı örneğini crawler4j'de kullanmaya çalışıyorum. Kodu crawler4j web sitesi here'dan aldım.Neden crawler4j örneği bir hata veriyor?

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

Yukarıdaki örnek, tarayıcı sınıfının kodudur.

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

Yukarıdaki, web gezgini için denetleyici sınıfı sınıfıdır. benim IDE (Intellij) aşağıdaki hatayı alıyorum gelen Controller sınıfından çalıştırmayı denediğinizde: Bilmem gereken here bulunursa maven configin hakkında bir şey

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

var mı? Farklı bir versiyon mu kullanmalıyım?

+1

Seslerinden, daha sonra Java'nın sonraki sürümlerinde derlenmiş kodun bir sürümünü çalıştırmaya çalışıyorsunuz. Örneğin. Kod, Java 7 ve çalışan Java 6 ile derlenmiş veya Java 6 ile derlenmiştir. Java 5 ... – MadProgrammer

+0

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

+0

@hey j.jerrod taylor..Ben çok temel program.i konuyla karşılaşıyorum bir istisna alıyorum Konu "ana" özel durum java.lang.NoClassDefFoundError: org/apache/http/istemci/yöntemleri/HttpUriRequest neden olduğu com.crawler.web.BasicCrawlController.main (BasicCrawlController.java:78) de \t: java.lang.ClassNotFoundException: başka Kavanoz ise org.apache.http.client.methods.HttpUriRequest, önerin ayrıca gerekli. –

cevap

1

Sorun, crawler4j ile değildi. Sorun şu ki, kullandığım Java sürümü crawler4j'de kullanılan en yeni Java sürümünden farklıydı. Versiyonu Java 7'ye güncellemeden hemen önce değiştirdim ve her şey iyi çalıştı. Java sürümümün 7'ye yükseltilmesinin aynı etkiye sahip olacağını tahmin ediyorum.

+0

Dinamik web sitesini crawler4j (java) kullanarak tarayacağım. http://stackoverflow.com/questions/27264931/crawling-dynamic-website-using-java?noredirect=1#comment43002565_27264931 – BasK

İlgili konular