Веб-парсер Java

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

Конфигурация библиотеки Java Web Scraping

Aspose.HTML for Java API поддерживает функции парсинга веб-страниц с использованием различных методов. Вы можете просто получить доступ к API, загрузив файлы JAR со страницы Загрузки или используя следующие конфигурации Maven в файле pom.xml вашего проекта:

Репозиторий:

 <repositories>
     <repository>
         <id>snapshots</id>
         <name>repo</name>
         <url>http://repository.aspose.com/repo/</url>
     </repository>
</repositories>

Зависимость:

 <dependencies>
    <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-html</artifactId>
        <version>21.12</version>
        <classifier>jdk17</classifier>
    </dependency>
</dependencies>

Веб-скрейпинг с HTML-навигацией в Java

Вы можете работать с классом Node для навигации по HTML-страницам. Фрагмент кода ниже демонстрирует, как перемещаться по HTML-документу в Java:

// Подготовьте HTML-код
String html_code = "<span>Hello</span> <span>World!</span>";

// Инициализировать документ из подготовленного кода
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(html_code, ".");
try {
    // Получить ссылку на первый дочерний элемент (первый SPAN) BODY
    com.aspose.html.dom.Element element = document.getBody().getFirstElementChild();
    System.out.println(element.getTextContent()); // output: Hello

    // Получить ссылку на второй элемент SPAN
    element = element.getNextElementSibling();
    System.out.println(element.getTextContent()); // output: World!
} finally {
    if (document != null) {
        document.dispose();
    }
}

Проверка HTML-документа и его элементов в Java

Вы можете работать с методом обхода элементов для навигации по HTML-страницам. В приведенном ниже примере кода подробно рассказывается, как проверять HTML-документы в Java.

// Загрузить документ из файла
String documentPath = "html_file.html";
var document = new com.aspose.html.HTMLDocument(documentPath);
{
    // Получить html-элемент документа
    var element = document.getDocumentElement();                
    System.out.println(element.getTagName()); // HTML
    
    // Получить последний элемент элемента html
    element = element.getLastElementChild();
    System.out.println(element.getTagName()); // BODY
    
    // Получить первый элемент элемента body
    element = element.getFirstElementChild();
    System.out.println(element.getTagName()); // H1
    System.out.println(element.getTextContent()); // Header 1     
}

Использование пользовательского фильтра для веб-скрейпера в Java

Вы можете настроить пользовательский фильтр, чтобы пропустить или принять определенные фильтры для работы с парсером веб-страниц в Java. В приведенном ниже примере кода подробно рассказывается, как работать с пользовательскими или определяемыми пользователем фильтрами в парсере веб-страниц с помощью Java:

public class OnlyImageFilter extends com.aspose.html.dom.traversal.filters.NodeFilter {

    @Override
    public short acceptNode(com.aspose.html.dom.Node n) {
        // Текущий фильтр пропускает все элементы, кроме элементов IMG.
        return "img".equals(n.getLocalName()) ? FILTER_ACCEPT : FILTER_SKIP;
    }

}

Впоследствии, после настройки пользовательского фильтра, вы можете легко перемещаться по HTML-странице, используя приведенный ниже фрагмент кода:

// Подготовьте HTML-код
String code = "    < p > Hello </p >\n" +
              "    <img src = 'image1.png' >\n" +
              "    <img src = 'image2.png' >\n" +
              "    <p > World ! </p >\n";

// Инициализировать документ на основе подготовленного кода
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Чтобы начать HTML-навигацию, нам нужно создать экземпляр TreeWalker.
    // Указанные параметры означают, что он начинает ходить с корня документа, перебирая все узлы и используя нашу кастомную реализацию фильтра
    com.aspose.html.dom.traversal.ITreeWalker iterator = document.createTreeWalker(document, com.aspose.html.dom.traversal.filters.NodeFilter.SHOW_ALL, new OnlyImageFilter());
    // Использовать
    while (iterator.nextNode() != null) {
        // Поскольку мы используем собственный фильтр, текущий узел всегда будет экземпляром HTMLImageElement.
        // Таким образом, нам не нужны дополнительные проверки здесь.
        com.aspose.html.HTMLImageElement image = (com.aspose.html.HTMLImageElement) iterator.getCurrentNode();

        System.out.println(image.getSrc());
        // вывод: image1.png
        // вывод: image2.png
    }
} finally {
    if (document != null) {
        document.dispose();
    }
}

Веб-скрейпинг с использованием XPath Query в Java

Вы можете выбирать разные узлы HTML-документа по разным критериям, используя XPath. В приведенном ниже коде показано, как выполнить парсинг веб-страниц с помощью XPath Query в Java:

// Подготовьте HTML-код
String code = "< div class='happy' >\n" +
              "        <div >\n" +
              "            <span > Hello ! </span >\n" +
              "        </div >\n" +
              "    </div >\n" +
              "    <p class='happy' >\n" +
              "        <span > World </span >\n" +
              "    </p >\n";

// Инициализировать документ на основе подготовленного кода
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Здесь мы оцениваем выражение XPath, в котором мы выбираем все дочерние элементы SPAN из элементов, чей атрибут «класс» равен «счастливому»:
    com.aspose.html.dom.xpath.IXPathResult result = document.evaluate("//*[@class='happy']//span",
            document,
            null,
            com.aspose.html.dom.xpath.XPathResultType.Any,
            null
    );

    // Перебрать полученные узлы
    for (com.aspose.html.dom.Node node; (node = result.iterateNext()) != null; ) {
        System.out.println(node.getTextContent());
        // вывод: привет
        // вывод: Мир!
    }
} finally {
    if (document != null) {
        document.dispose();
    }
}

Веб-скрейпинг с помощью селектора CSS в Java

Вы можете искать нужные элементы в парсере с помощью селектора CSS. Вы можете указать параметр в качестве селектора запроса, а затем список совпадений с селектором будет возвращен веб-парсеру. В следующем примере кода показано, как использовать селектор CSS в парсере веб-страниц с помощью Java:

// Подготовьте HTML-код
String code = "< div class='happy' >\n" +
              "        <div >\n" +
              "            <span > Hello </span >\n" +
              "        </div >\n" +
              "    </div >\n" +
              "    <p class='happy' >\n" +
              "        <span > World ! </span >\n" +
              "    </p >\n";

// Инициализировать документ на основе подготовленного кода
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Здесь мы создаем селектор CSS, который извлекает все элементы, чей атрибут «класс» равен «счастливому», и их дочерние элементы SPAN.
    com.aspose.html.collections.NodeList elements = document.querySelectorAll(".happy span");

    // Перебрать полученный список элементов
    elements.forEach(element -> {
        System.out.println(((com.aspose.html.HTMLElement) element).getInnerHTML());
        // вывод: привет
        // вывод: Мир!
    });
} finally {
    if (document != null) {
        document.dispose();
    }
}

Вывод

В этой статье вы изучили различные методы, которые можно использовать для создания парсера веб-страниц на Java. Вам нужно всего лишь сделать несколько вызовов API, используя библиотеку Aspose.HTML для Java, чтобы создать веб-парсер на Java. В этой статье вы можете изучить методы HTML-навигации, селектора CSS, пользовательского фильтра и запросов XPath. Кроме того, если вам нужна дополнительная информация или помощь, свяжитесь с нами через форум.

Смотрите также

Конвертировать EPUB в XPS на Java