2016-09-08 3 views
-4

Я пытаюсь QuickStart от https://github.com/yasserg/crawler4jКак решить

я выполнить следующие шаги, чтобы проверить пример:

0) Добавить crawler4j.jar в Java библиотеки

1) Создайте Java пакет под названием mycrawler

2) Вставьте Quickstart код для класса-mycrawler

3) Run

package mycrawler; 
public class MyCrawler extends WebCrawler { 

    private final static Pattern FILTERS = Pattern.compile(".*(\\.(css|js|gif|jpg" 
                  + "|png|mp3|mp3|zip|gz))$"); 

    /** 
    * This method receives two parameters. The first parameter is the page 
    * in which we have discovered this new url and the second parameter is 
    * the new url. You should implement this function to specify whether 
    * the given url should be crawled or not (based on your crawling logic). 
    * In this example, we are instructing the crawler to ignore urls that 
    * have css, js, git, ... extensions and to only accept urls that start 
    * with "http://www.ics.uci.edu/". In this case, we didn't need the 
    * referringPage parameter to make the decision. 
    */ 
    @Override 
    public boolean shouldVisit(Page referringPage, 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(); 
      Set<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()); 
     } 
    } 
} 

Результат: enter image description here enter image description here Ошибка: mycrawler.mycrawler класс не был найден в mycrawler проекте.

No main classes found>

*** Как решить?

Я новичок в Java. ***

+1

Вам, кажется, не хватает инструкций 'import' в вашем коде. Все эти подчеркивания в красном, вероятно, пытаются рассказать вам о проблемах. – khelwood

+0

@ khelwood я добавил. Все еще не работает. Поведение основного класса/метода – evabb

+2

Продолжайте читать файл crawler4j readme, вы все еще не закончили. Вам нужно создать класс 'Controller', который содержит метод' main' –

ответ

1

Вы класс расширяет WebCrawler, но нет никаких признаков того, как Java может решить этот класс.

Вам нужно добавить оператор импорта, чтобы найти этот класс.

Кроме того, если вы хотите запустить свой класс, вам нужно иметь public static void main(String[] args) методу

1

Вы, кажется, с помощью NetBeans. Предлагаю использовать Ctrl-Shift-I: Исправить все объём импорта. Когда в классе нет ошибок, он сможет скомпилировать.

Тогда вам необходимо указать пункт ввода в вашу программу, которая в java является статическим методом main(String[] args). Код в этом методе выполняется, когда вы выбираете файл как основной класс.


Я предлагаю вам кто-то, чтобы сделать вам некоторые интро к Java, так как вы не будете, вероятно, сможет завершить свою задачу только следуя Quickstart библиотеки вы хотите использовать.

1

Я думаю, что вы забыли реализовать контроллер как в документации

Вы также должны реализовать класс контроллера, который определяет семена ползать, папка, в которой промежуточные данные сканирования должны быть сохранены, и количество параллельные потоки

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/~lopes/"); 
     controller.addSeed("http://www.ics.uci.edu/~welling/"); 
     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); 
    } 
} 
+0

Вы имеете в виду класс Контроллер должен быть добавлен в коды.Тем не менее, я добавил контроллер класса ниже класса MyCrawler, который все еще не работает – evabb

+0

Ну, я не понимаю, что вы подразумеваете под «добавленным ниже», однако из того, что вы использовали в верхней части, есть указание, что вам не хватает «основного», который является точкой входа в программу java! –