Сегодня на большинстве сайтов есть контент, доступный через API, RSS-каналы или другую форму структурированных данных. Но что делать, если ничего из вышеперечисленного не предусмотрено, а данные нужны в структурированном виде?
Вот где в игру вступает искусство парсинга веб-страниц. Вот о чем эта статья…
Извлечь 10 лучших результатов поиска Google
Мы собираемся создать простой веб-скребок, который сможет извлекать заголовок и URL-адрес из 10 лучших результатов поиска Google для любого заданного термина.
Давайте испачкаем руки
Для сборки нашего парсера мы используем Java и библиотеку Jsoup.
Jsoup — это библиотека Java для работы с реальным HTML. Он предоставляет очень удобный API для извлечения данных и управления ими с использованием лучших методов DOM, CSS и jquery.
— С веб-сайта Jsoup
Почему Ява?
Мы используем Java в этом примере, чтобы показать, что на этом языке очень просто написать парсер. Большинство людей думают о Java с большим количеством конфигураций и сложностей по сравнению с чем-то вроде NodeJ.
Получить селектор CSS для извлечения данных
Мы хотим извлечь заголовок и URL-адрес со страницы результатов поиска. Итак, запустите инструменты разработчика вашего браузера и получите нужный нам CSS-селектор…
Приходится наводить курсор на интересующие нас элементы и анализировать структуру html. На скриншоте мы видим внешний контейнер div#res
, содержащий все результаты.
Каждый результат поиска заключен в div.g
, а HTML-код выглядит так:
<div class="g">
<div class="rc" data-hveid="27">
<h3 class="r">
<a href="http://www.speedtest.net/">
Speedtest.net by Ookla - The Global Broadband Speed Test
</a>
</h3>
<div class="s">
...
</div>
</div>
</div>
Таким образом, значение, которое мы хотим получить, находится в теге a
внутри файла h3
.
После некоторых экспериментов мы используем минимальный конечный селектор: h3.r a
Напишите актуальный код
Код состоит всего из нескольких строк, и они хорошо прокомментированы, поэтому я просто публикую их здесь…
package de.mphweb;
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element;
public class App {
//We need a real browser user agent or Google will block our request with a 403 - Forbidden public static final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36";
public static void main(String[] args) throws Exception {
//Fetch the page final Document doc = Jsoup.connect("https://google.com/search?q=test").userAgent(USER_AGENT).get();
//Traverse the results for (Element result : doc.select("h3.r a")){
final String title = result.text(); final String url = result.attr("href");
//Now do something with the results (maybe something more useful than just printing to console)
System.out.println(title + " -> " + url); } } }
Скачать код
Как обычно, вы можете найти работающий проект Maven на Github.
Хотите узнать больше?
Я только что создал новый онлайн-видеокурс на Udemy и предлагаю скидку постоянным читателям моего…
☞ Java In-Depth: станьте полноценным Java-инженером!