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