Веб-скребок 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 у Java

Ви можете вибрати різні вузли документа HTML за різними критеріями за допомогою XPath. Наведений нижче код демонструє, як виконати веб-скрапінг за допомогою запиту XPath у 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 з елементів, атрибут 'class' яких дорівнює 'happy':
    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 Selector у 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, який вилучає всі елементи, атрибут 'class' яких дорівнює 'happy', і їхні дочірні елементи 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 for Java, щоб створити веб-скребок на Java. У цій статті ви можете ознайомитися з методами навігації HTML, селектора CSS, спеціального фільтра та запиту XPath. Крім того, будь ласка, зв’яжіться з нами через форум, якщо вам потрібна додаткова інформація чи допомога.

Дивись також

Перетворіть EPUB на XPS у Java