Как парсить веб-сайт
Table Of Content
Мы часто слышим о том, сколько данных есть в Интернете и как они экспоненциально растут с каждым годом.
Это приводит к обсуждениям о Big Data, машинном обучении и так далее. Но в конце концов, что вы делаете с веб-данными?
Вероятно, ничего, потому что 99% веб-сайтов не позволяют вам легко получить доступ к их данным. Вам нужен доступ к этой информации масштабируемым способом.
К счастью, есть парсинг веб-сайтов, который приходит на помощь!
Парсинг веб-сайтов позволяет автоматически извлекать любое содержимое с любого веб-сайта. Вы можете практически парсить все, начиная от интернет-магазинов и заканчивая репозиториями на GitHub.
Как это работает
Сначала вам нужно понять, как создается веб-страница, и особенно как работает HTML.
Веб-браузер отображает HTML-документы. Эти документы описывают структуру страницы семантически.
Представьте себе это как дерево с ветвями. На самом деле, для отображения веб-страницы веб-браузеры организуют HTML-документ в структуру дерева, называемую DOM (Document Object Model).
<!DOCTYPE html>
<html>
<head>
<title>Это заголовок</title>
</head>
<body>
<h1>Заголовок</h1>
<p>Привет, мир!</p>
</body>
</html>
Что вам нужно помнить, так это то, что все вложено.
Это очень простая структура. Вы можете вкладывать ее так, как вам нужно:
...
<body>
<h1>Заголовок</h1>
<p>
<span> Я вложенный <b>Я вложенный и жирный!</b>
<span> Вау, слишком много вложений для меня, я теряюсь
<span>Подождите... а можно ли это сделать?</span>
</span>
</span>
</p>
</body>
...
Есть некоторые правила, которые нужно соблюдать, но это не тема этой статьи.
Элементы "h1" и "p" являются тегами. Их можно описать атрибутами:
<h1 class="nice-heading" id="main-heading"/>Заголовок</h1>
Атрибуты дополнительно описывают теги (узлы). Они очень, очень полезны, в основном потому, что позволяют описать путь к данным.
Действительно, когда вы говорите "Я хочу извлечь данные" из одной строки кода выше, вы обращаетесь к значению "Заголовок", которое является текстовым значением.
Но как получить доступ к этим данным?
Получение доступа к данным
Хорошо, предположим, у нас есть следующий код:
...
<body>
<div class="container">
...
<div class="card">
<h3 class="use-case">Репозитории</h3>
<p>Обогатите свою бизнес-базу данных или найдите новые потенциальные клиенты для вашей CRM-системы.</p>
</div>
...
</div>
</body>
...
Предыдущий (упрощенный) код выводит следующее:
В этом случае, как получить доступ к тексту первой карточки, описанной в нашем HTML-коде?
Просто! Вам нужно использовать язык XPath.
Язык XPath основан на древовидном представлении XML-документа и предоставляет возможность навигации по дереву, выбора узлов по различным критериям.
Помните, как я говорил, что HTML-документ похож на дерево с ветвями? Так вот, то же самое справедливо и для XML. Оба этих языка являются тем, что мы называем языком разметки.
XPath дает вам возможность навигации по DOM (помните, что HTML организован в структуру дерева с ветвями!).
В конце концов, получение доступа к данным очень просто, потому что вы получаете следующую структуру:
div.container
-- div.card
-- h3.use-case
#text
-- p
#text
Теперь, если вы хотите получить доступ к тексту внутри тега <p>
с использованием XPath:
document.xpath("//div[@class="container"]//div[class="card"]//p/text()")
По сути, этот код говорит: "Возьми div container, затем перейди к div card и извлеки текст внутри тега p".
Таким образом, вы сможете извлечь текст "Обогатите свою бизнес-базу данных или найдите новые потенциальные клиенты для вашей CRM-системы".
Удивительно, не правда ли?
Новый уровень
Теперь, когда вы понимаете основы, вам нужно немного глубже погрузиться в программирование.
Для большинства случаев парсинга я обычно рекомендую использовать Python.
Вот пример парсинга веб-сайтов с помощью Python и BeautifulSoup.
Существует удивительное сообщество и множество пакетов и библиотек, которые вы можете использовать для парсинга веб-данных.
Среди прочих:
Мы только говорили о простых HTML-страницах, но вы, наверное, знаете, что веб-сайты сегодня все больше и больше используют JavaScript для создания очень крутых вещей.
К сожалению, JavaScript не упрощает парсинг веб-страниц. Но у каждой проблемы есть решение 🙂
Некоторые примеры полезных библиотек:
- Puppeteer (которая поддерживается самой Google!)
- NightmareJS
Чтобы немного помочь вам, вот отличный Шпаргалка по XPath, которую вы можете использовать, когда вам нужно получить доступ к сложным вложенным данным.
Если вам нужна помощь с парсингом веб-страниц, не стесняйтесь связаться с нами.
Обязательно загляните на наш блог, чтобы понять, что можно сделать с парсингом веб-страниц.
Опубликовано на captaindata.co 6 ноября 2018 года.