CoderCastrov logo
CoderCastrov
Парсер веб-страниц

Как парсить веб-сайт

Как парсить веб-сайт
просмотров
3 мин чтение
#Парсер веб-страниц

Мы часто слышим о том, сколько данных есть в Интернете и как они экспоненциально растут с каждым годом.

Это приводит к обсуждениям о 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 не упрощает парсинг веб-страниц. Но у каждой проблемы есть решение 🙂

Некоторые примеры полезных библиотек:

Чтобы немного помочь вам, вот отличный Шпаргалка по XPath, которую вы можете использовать, когда вам нужно получить доступ к сложным вложенным данным.

Если вам нужна помощь с парсингом веб-страниц, не стесняйтесь связаться с нами.

Обязательно загляните на наш блог, чтобы понять, что можно сделать с парсингом веб-страниц.


Опубликовано на captaindata.co 6 ноября 2018 года.