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

OSCHINA-MIRROR/flashsword20-webmagic

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README-zh.md 11 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 07.03.2025 20:04 0af64d2

логотип

Maven Central Лицензия Статус сборки

Официальный сайт http://webmagic.io/

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

Основные характеристики WebMagic:

  • Полностью модульная архитектура с высокой степенью расширяемости.
  • Простое ядро, но охватывающее весь процесс работы скрапера, что делает его гибким и мощным, а также отличным материалом для обучения работе со скраперами.
  • Предоставляет богатый набор API для извлечения данных с страниц.
  • Нет необходимости в конфигурационных файлах; можно создать скрапер через POJO + аннотации.
  • Поддерживает многопоточность.
  • Поддерживает распределённую систему.
  • Поддерживает парсинг страниц, динамически отрисованных JavaScript.
  • Независим от других фреймворков, что позволяет легко интегрировать его в проект.

Архитектура и дизайн WebMagic были вдохновлены следующими двумя проектами, за что мы благодарим авторов этих проектов:Python-скрапер Scrapy https://github.com/scrapy/scrapy

Java-скрапер Spiderman http://git.oschina.net/l-weiwei/spiderman

GitHub-адрес WebMagic: https://github.com/code4craft/webmagic.

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

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

WebMagic использует Maven для управления зависимостями. В проекте следует добавить соответствующие зависимости для использования WebMagic:

<dependency>
    <groupId>us.codecraft</groupId>
    <artifactId>webmagic-core</artifactId>
    <version>0.7.5</version>
</dependency>
<dependency>
    <groupId>us.codecraft</groupId>
    <artifactId>webmagic-extension</artifactId>
    <version>0.7.5</version>
</dependency>

WebMagic использует slf4j-log4j12 как реализацию slf4j. Если вы используете свою реализацию slf4j, удалите эту зависимость из проекта.

<exclusions>
    <exclusion>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
    </exclusion>
</exclusions>

Структура проекта

WebMagic состоит в основном из двух пакетов:

  • webmagic-core

    Основной пакет WebMagic, содержащий базовые модули для создания пауков и простого извлечения данных. Цель webmagic-core — стать образцовым примером реализации веб-скрапинга.

  • webmagic-extension

    Расширяемый пакет WebMagic, предоставляющий удобные инструменты для создания пауков. Включает поддержку аннотаций для определения пауков, работы с JSON, распределённых систем и т.д.

Кроме того, WebMagic включает два доступных расширения, которые были выделены из основных пакетов из-за зависимости от тяжёлых инструментов. Эти пакеты требуют самостоятельной компиляции после скачивания исходного кода:* webmagic-saxon

Пакет, объединяющий WebMagic с Saxon. Saxon — это инструмент для парсинга XPath и XSLT, который используется WebMagic для поддержки парсинга XPath версии 2.0.
  • webmagic-selenium

    Пакет, объединяющий WebMagic с Selenium. Selenium — это инструмент для имитации браузера и рендера страниц, используемый WebMagic для сбора динамических страниц.

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

Без Maven

В директории lib проекта находятся все необходимые jar-файлы, которые можно импортировать непосредственно в IDE.

Первый паук

Настройка PageProcessor

PageProcessor является частью webmagic-core, и его настройка позволяет создать логику своего паука. Ниже приведён пример кода для сбора блогов с сайта OSChina:

public class OschinaBlogPageProcessor implements PageProcessor {

    private Site site = Site.me().setDomain("my.oschina.net");

    @Override
    public void process(Page page) {
        List<String> links = page.getHtml().links().regex("http://my\\.oschina\\.net/flashsword/blog/\\d+").all();
        page.addTargetRequests(links);
        page.putField("title", page.getHtml().xpath("//div[@class='BlogEntity']/div[@class='BlogTitle']/h1").toString());
        page.putField("content", page.getHtml().$("div.content").toString());
        page.putField("tags", page.getHtml().xpath("//div[@class='BlogTags']/a/text()").all());
    }

    @Override
    public Site getSite() {
        return site;
    }

    public static void main(String[] args) {
        Spider.create(new OschinaBlogPageProcessor()).addUrl("http://my.oschina.net/flashsword/blog")
                .addPipeline(new ConsolePipeline()).run();
    }
}

---Перевод выполнен согласно указанным правилам:

Здесь методом page.addTargetRequests() добавляются URL для парсинга, а методом page.putField() сохраняются извлечённые данные. Метод page.getHtml().xpath() используется для извлечения данных по определённому правилу; здесь поддерживаются цепочки вызовов. После завершения операции, toString() преобразует данные в одну строку, а all() — в список строк.

Класс Spider является входной точкой для пауков. Pipeline представляет собой интерфейс для вывода данных и их сохранения; здесь ConsolePipeline указывает на то, что данные будут выводиться в консоль.Выполнение этого основного метода позволит вам видеть результаты парсинга в консоли. По умолчанию WebMagic имеет интервал между запросами в три секунды, поэтому будьте терпеливы и подождите.

Использование аннотаций

WebMagic-extension включает методы создания пауков с использованием аннотаций. Для этого достаточно добавить аннотации к POJO. Ниже приведён пример кода, который выполняет ту же задачу, что и OschinaBlogPageProcesser:

@TargetUrl("http://my.oschina.net/flashsword/blog/\\d+")
public class OschinaBlog {

    @ExtractBy("//title")
    private String title;

    @ExtractBy(value = "div.BlogContent", type = ExtractBy.Type.Css)
    private String content;

    @ExtractBy(value = "//div[@class='BlogTags']/a/text()", multi = true)
    private List<String> tags;

    public static void main(String[] args) {
        OOSpider.create(Site.me(), new ConsolePageModelPipeline(), OschinaBlog.class).addUrl("http://my.oschina.net/flashsword/blog").run();
    }
}

Этот пример определяет модельный класс, поля которого — title, content и tags — являются атрибутами для извлечения. Этот класс может быть переиспользован в Pipeline.

Подробная документация

Документация доступна по адресу http://webmagic.io/docs/.

Примеры

В каталоге webmagic-samples представлены примеры использования PageProcessor для извлечения данных с различных сайтов.

Использование WebMagic можно рассмотреть на примере: oschina openapi приложение: перемещение блога

Лицензия

WebMagic использует лицензию Apache 2.0 [http://opensource.org/licenses/Apache-2.0]### Электронные письма:

Google Groups: https://groups.google.com/forum/#!forum/webmagic-java

QQ: http://list.qq.com/cgi-bin/qf_invite?id=023a01f505246785f77c5a5a9aff4e57ab20fcdde871e988

Группы QQ:

373225642 (полностью заполнена) 542327088

Связанные проекты:

Gather Platform

Платформа Gather Platform представляет собой набор инструментов для сбора данных, основанная на ядре Webmagic, которая предоставляет веб-интерфейсы для конфигурации и управления задачами.

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/flashsword20-webmagic.git
git@api.gitlife.ru:oschina-mirror/flashsword20-webmagic.git
oschina-mirror
flashsword20-webmagic
flashsword20-webmagic
develop