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