1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/liinux-crawler4j

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

#---------------------------------------------------------------------------------

Описание: Исходный код доступен по адресу

https://github.com/yasserg/crawler4j

Цель этого проекта - изучение данного исходного кода.

Адрес публикации примеров кода для обучения:

http://www.cnblogs.com/liinux

1. Изучение исходного кода crawler4j (1): сбор данных с новостей сайта Sohu 2. Изучение исходного кода crawler4j (2): сбор данных о квартирах с сайта Ziroom #---------------------------------------------------------------------------------

crawler4j

Статус сборки Maven Central

crawler4j — это открытое исходное программное обеспечение для создания веб-краблеров на Java, которое предоставляет простой интерфейс для извлечения информации с веб-ресурсов. Используя его, вы можете создать многопоточный веб-краблер всего за несколько минут.

Установка

Использование Maven

Чтобы использовать последнюю версию crawler4j, используйте следующий фрагмент в вашем файле pom.xml:

<dependency>
    <groupId>edu.uci.ics</groupId>
    <artifactId>crawler4j</artifactId>
    <version>4.2</version>
</dependency>

Без использования Maven

JAR-файлы crawler4j доступны на странице релизов и на странице Maven Central.Если вы используете crawler4j без Maven, обратите внимание, что JAR-файл crawler4j имеет несколько внешних зависимостей. На странице релизов можно найти файл с названием crawler4j-X.Y-with-dependencies.jar, который включает в себя crawler4j со всеми его зависимостями как единое целое. Вы можете скачать этот файл и добавить его в свой CLASSPATH, чтобы обеспечить наличие всех необходимых зависимостей.## Быстрый старт Вы должны создать класс краблера, расширяющий WebCrawler. Этот класс решает, какие URL следует извлекать, а также обрабатывает скачанные страницы. Ниже приведён пример реализации:

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

    /**
     * Этот метод получает два параметра.
     */
    Первый параметр  это страница, в которой мы обнаружили этот новый URL, а второй параметр  сам новый URL. Вы должны реализовать эту функцию для указания того, следует ли выполнять данный URL (основываясь на вашей логике парсинга). В этом примере мы указываем парсеру игнорировать URL-ы, имеющие расширения типа CSS, JS, GIF и т. д., и принимать только те URL-ы, которые начинаются с "http://www.ics.uci.edu/". В данном случае нам не требовался параметр referringPage для принятия решения.

    @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/");
    }

    /**
     * Эта функция вызывается после того, как содержимое URL было успешно загружено.
     * Вы можете легко получить URL, текст, ссылки, HTML и уникальный ID загруженной страницы.
     */
    @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();

Быстрый старт

Вы должны создать класс краблера, расширяющий WebCrawler. Этот класс решает, какие URL следует извлекать, а также обрабатывает скачанные страницы. Ниже приведён пример реализации:

public class MyCrawler extends WebCrawler {
    private final static Pattern FILTERS = Pattern.compile(". *(\\.(css|js|gif|jpg|png|mp3|zip|gz))$");

    /**
     * Этот метод получает два параметра.
     *
     * Первый параметр — это страница, в которой мы обнаружили этот новый URL, а второй параметр — сам новый URL. 
     * Вы должны реализовать эту функцию для указания того, следует ли выполнять данный URL (основываясь на вашей логике парсинга). 
     * В этом примере мы указываем парсеру игнорировать URL-ы, имеющие расширения типа CSS, JS, GIF и т. д., 
     * и принимать только те URL-ы, которые начинаются с "http://www.ics.uci.edu/". 
     * В данном случае нам не требовался параметр referringPage для принятия решения.
     */
    @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/");
    }

    /**
     * Эта функция вызывается после того, как содержимое URL было успешно загружено.
     * Вы можете легко получить URL, текст, ссылки, HTML и уникальный ID загруженной страницы.
     */
    @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());
        System.out.println("Длина HTML: " + html.length());
        System.out.println("Количество исходящих ссылок: " + links.size());
    }
}```
Как можно видеть в приведённом выше коде, есть две основные функции, которые следует переопределить:

- `shouldVisit`: Эта функция решает, следует ли выполнять данный URL. В приведённом выше примере эта функция запрещает скачивание файлов с расширениями `.css`, `.js` и других типов медиафайлов, и позволяет только страницы внутри домена `'www.ics.uci.edu'`.

- `visit`: Эта функция вызывается после успешной загрузки содержимого URL. Вы можете легко получить URL, текст, ссылки, HTML и уникальный ID загруженной страницы. Также вам следует реализовать контроллерный класс, который будет указывать семена парсинга, папку для хранения промежуточных данных парсинга и количество одновременно выполняющихся потоков:

```java
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);

        /*
         * Создаём контроллер для этого ползунка.
         */
        PageFetcher pageFetcher = new PageFetcher(config);
        RobotstxtConfig robotstxtConfig = new RobotstxtConfig();
        RobotstxtServer robotstxtServer = new RobotstxtServer(robotstxtConfig, pageFetcher);
        CrawlController controller = new CrawlController(config, pageFetcher, robotstxtServer);

        /*
         * Для каждого ползунка вам нужно добавить некоторые начальные URL-адреса. Это первые
         * URL-адреса, которые будут получены, а затем ползунок начинает следовать за ссылками,
         * найденными в этих страницах.
         */
        controller.addSeed("http://www.ics.uci.edu");
``````markdown
edu/~lopes/");
          controller.addSeed("http://www.ics.uci.edu/~welling/");
          controller.addSeed("http://www.ics.uci.edu/");
           /*
           * Начинаем ползание. Это блокирующая операция, то есть ваш код
           * достигнет строки после этой только когда ползание будет завершено.
           */
          controller.start(MyCrawler.class, numberOfCrawlers);
      }
  }

Примеры

  • Основной ползунок: полный исходный код приведённого выше примера с более подробными сведениями.
  • Ползунок для изображений: простой ползунок для изображений, который скачивает содержимое изображений из домена ползунка и сохраняет его в папке. Этот пример демонстрирует, как можно получать двоичные данные с помощью crawler4j.
  • Сбор данных из потоков: этот пример показывает, как контроллер может собирать данные/статистику из потоков ползунка.
  • Несколько ползунков: это образец, который показывает, как два различных ползунка могут работать параллельно. Например, вы можете разделить своё ползание на различные домены и применять различные стратегии ползания для каждой группы. Каждый контроллер сбора данных может иметь свои собственные конфигурации.
   ## Подробности конфигураций
  Класс контроллера имеет обязательный параметр типа [CrawlConfig](https://github.com/yasserg/crawler4j/blob/master/src/main/java/edu/uci/ics/crawler4j/crawler/CrawlConfig.java).
  Экземпляры этого класса могут использоваться для настройки crawler4j. В следующих разделах описаны некоторые детали конфигураций.
   ### Глубина сбора данных
  По умолчанию нет ограничений на глубину сбора данных. Однако вы можете установить ограничение на глубину сбора данных. Например, предположим, что у вас есть страница-источник "A", которая ссылается на "B", которая ссылается на "C", которая ссылается на "D". Таким образом, у нас имеется следующая структура ссылок:
   A -> B -> C -> D
   Поскольку "A" является страницей-источником, она будет иметь глубину 0. "B" будет иметь глубину 1 и так далее. Вы можете установить ограничение на глубину страниц, которые собирает crawler4j. Например, если вы установите это ограничение на 2, он не будет собирать страницу "D". Чтобы установить максимальную глубину, вы можете использовать:
  ```java
  crawlConfig.setMaxDepthOfCrawling(maxDepthOfCrawling);

Максимальное количество страниц для сбора данных

Хотя по умолчанию нет ограничений на количество страниц для сбора данных, вы можете установить такое ограничение:

crawlConfig.setMaxPagesToFetch(maxPagesToFetch);
``````java
setMaxPagesToFetch(maxPagesToFetch);

Политика вежливости

crawler4j спроектирован очень эффективно и способен быстро собирать данные с доменов (например, он смог собирать 200 страниц Википедии в секунду). Однако, поскольку это противоречит политикам сбора данных и создает огромную нагрузку на серверы (и они могут заблокировать вас!), начиная с версии 1.3, по умолчанию crawler4j ждет минимум 200 миллисекунд между запросами. Однако этот параметр можно настроить:

crawlConfig.setPolitenessDelay(politenessDelay);

Прокси

Нужно ли запускать ваш сборщик данных через прокси? Если да, вы можете использовать:

crawlConfig.setProxyHost("proxyserver.example.com");
crawlConfig.setProxyPort(8080);

Если ваш прокси также требует аутентификацию:

crawlConfig.setProxyUsername(username);
crawlConfig.setProxyPassword(password);

Возобновляемый сбор данных

Иногда вам нужно запустить сборщик данных на длительное время. Возможно, сборщик данных будет завершен непреднамеренно. В таких случаях может потребоваться возобновление парсинга. Вы сможете возобновить ранее остановленный/сломанный парсинг с помощью следующих настроек:

crawlConfig.setResumableCrawling(true);

Однако следует отметить, что это может сделать парсинг немного медленнее.

Строка агента пользователя

Строка агента пользователя используется для представления вашего парсера веб-серверам. Подробнее см. здесь. По умолчанию crawler4j использует следующую строку агента пользователя:

"crawler4j (https://github.com/yasserg/crawler4j/)"

Однако вы можете переопределить её:

crawlConfig.setUserAgentString(userAgentString);

Лицензия

Авторское право © 2010-2015 Yasser Ganjisaffar Размещено под лицензией Apache License 2.0, см. LICENSE

Комментарии ( 0 )

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

Введение

crawler4j is an open source web crawler for Java which provides a simple interface for crawling the Web. Using it, you can setup a multi-threaded web crawler in few minutes. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/liinux-crawler4j.git
git@api.gitlife.ru:oschina-mirror/liinux-crawler4j.git
oschina-mirror
liinux-crawler4j
liinux-crawler4j
master