Как спарсить данные за 5 простых шагов
Как часто вам нужно спарсить данные с веб-сайта для вашей работы, но это кажется слишком сложной задачей? Эта статья в блоге научит вас, как собирать данные за 5 простых шагов.
Эта статья написана для профессионалов в области программного обеспечения, которым необходимо извлекать данные из веб-страниц или PDF-файлов и которые хотят, чтобы этот процесс был максимально быстрым и безболезненным.
Существует множество способов парсинга данных, но в этой статье мы остановимся на нескольких наиболее популярных методах, которые используются профессиональными разработчиками: XPath, регулярные выражения, Beautiful Soup (BSA), Scrapy, Python Requests Library (PRL) и Selenium Webdriver.
Все эти инструменты для парсинга можно легко установить, для каждого из них прилагаются инструкции. Ниже приведена таблица с описанием плюсов и минусов этих инструментов, а также ссылки на дополнительную информацию о них, когда это необходимо. В таблицу включены некоторые другие, не очень популярные методы, которые я также пробовал, и они включены для полноты картины.
Сбор данных с сайта может быть выполнен с помощью любого языка программирования.
В этой статье я покажу, как парсить данные с помощью Python, поскольку его очень легко установить и довольно просто изучить, особенно если вы уже знаете другой язык программирования, поскольку синтаксис похож на синтаксис Java, C и PHP. Python поддерживает несколько библиотек для парсинга данных, которые описаны в таблице. Парсинг - это инструмент, который должен уметь использовать каждый, поскольку он позволяет получить ценную информацию о целевом рынке, конкурентах и/или клиентах.
Парсинг сайтов может помочь вам извлечь различные типы данных. Написав несколько строк кода, вы можете найти объявления о продаже недвижимости, данные о гостиницах или даже данные о товарах с ценами на сайтах электронной коммерции. Но если вы собираетесь просматривать веб-страницы и собирать данные, вам необходимо позаботиться о нескольких вещах.
Важно убедиться, что спарсенные данные находятся в пригодном для использования формате. Ваш код может извлекать данные с нескольких веб-сайтов. Извлеченные данные являются чистыми и не дают ошибочных результатов при выполнении алгоритмов. Таким образом, если вы хотите написать свой код или создать небольшой проект по парсингу для сбора данных с сайтов, вы можете сделать это за пять простых шагов:

Как спарсить данные 5 простыми способами
1. Выберите язык программирования или инструмент для парсинга данных
"Человек хорош настолько, насколько хороши его инструменты". Следовательно, вам необходимо выбрать инструмент для парсинга сайта таким образом, чтобы он соответствовал вашим потребностям. Хотя некоторые готовые к использованию программы могут показаться простыми в использовании, они могут не позволить вам вносить много изменений в конфигурацию.
В то же время, многие инструменты могут не иметь плагина для сохранения данных, которые вы собрали, в базе данных или в облаке. Если говорить о языках программирования, которые сегодня используются для парсинга данных, то это Node.js, Python, Ruby и другие. Но среди них Python является самым популярным благодаря легкости изучения, простому синтаксису, наличию множества внешних библиотек и открытому исходному коду.
Существует множество библиотек, таких как BeautifulSoup и Scrapy, которые можно использовать для обхода веб-страниц, создания скриптов для обхода и запуска заданий парсинга через определенные промежутки времени. Python обеспечивает огромную гибкость при интеграции других систем с вашим механизмом парсинга. Вы можете легко сохранять полученные данные на локальной машине, в базах данных, в хранилище S3 или даже сбрасывать их в файл Word или Excel.
2. Парсинг одной веб-страницы и анализ компонентов
Прежде чем приступить к парсингу информации о товарах, скажем, с тысячи страниц товаров на Wildberries, необходимо получить доступ к странице и получить всю Html-страницу, чтобы проанализировать ее и принять решение о стратегии. Данные на Html-страницах могут находиться в определенных парах ключ-значение в тегах или в тексте внутри тегов. Вы можете использовать такие библиотеки, как BeautifulSoup, чтобы указать, из какого именно тега вы хотите извлечь данные на каждой веб-странице, а затем запустить код в цикле.
Таким образом, для каждой отдельной веб-страницы с товаром ваш код будет запускаться и извлекать одну и ту же информацию - скажем, данные о цене.
3. Примите решение о стратегии очистки и хранения данных
Еще до того, как вы начнете собирать данные, вы должны решить, где вы будете их хранить. Это связано с тем, что от того, где вы будете хранить данные, будет зависеть их обработка. Существует множество вариантов. Вы можете выбирать между базами данных NoSQL и SQL, в зависимости от того, будут ли данные, которые вы собираете, структурированными или неструктурированными.
Для неструктурированных данных вы можете выбрать базы данных SQL, поскольку вы можете хранить данные в строках, состоящих из набора атрибутов. Для неструктурированных данных, где нет заданных атрибутов, можно использовать базы данных NoSQL. Что касается того, в какой базе данных сохранять данные, то для SQL можно выбрать MySQL или Postgres. Selectel предлагает облачные базы данных, где вы можете хранить свои данные и платить за использование.
Для NoSQL вы можете выбрать одно из полностью управляемых и чрезвычайно быстрых решений, например DynamoDb или ElasticSearch. У разных баз данных есть свои преимущества, некоторые предлагают быстрый поиск, некоторые - более дешевое хранение за ТБ.
Выбор базы данных зависит от вашего конкретного случая использования и, следовательно. Прежде чем остановить свой выбор на одной из баз данных, необходимо провести небольшое исследование. Если вам нужно хранить изображения и видео большого размера, вы можете использовать AWS S3 или Glacier. Последний используется, когда вы хотите хранить большие объемы данных в архивном формате. Вам не понадобится часто обращаться к ним, в то время как первый вариант является более распространенным решением. Это что-то вроде онлайнового жесткого диска. Вы можете создавать папки и сохранять в них файлы.

4. Создание списка веб-страниц или написание regex для очистки данных
Хотя вы можете тестировать свой код на одной веб-странице, вы наверняка хотите просмотреть десятки или сотни страниц, поэтому и затеяли этот проект. Обычно, если вы собираетесь перебрать несколько веб-страниц, вы можете сохранить ссылки в массиве и перебирать их при переборе страниц. Лучшим и более часто используемым решением является использование regex. Проще говоря, это программный способ идентификации веб-сайтов с похожей структурой URL.
Например, вы можете захотеть получить данные о продуктах всех ноутбуков на Ozon. Теперь вы можете увидеть, что все URL начинаются с "/laptop/<laptopModelNo>/prodData". Вы можете повторить этот формат с помощью regex, чтобы все такие URL были извлечены и ваша функция парсинга работала только с этими URL. А не на всех URL на сайте.
Если у вас слишком много веб-страниц, мы рекомендуем вам использовать параллельную обработку, чтобы в любой момент времени просматривать около десяти веб-страниц. Если вы собираете веб-страницы и извлекаете из них ссылки, а затем собираете веб-страницы, на которые ведут эти ссылки, то вы можете использовать древовидный подход для одновременного сбора нескольких дочерних страниц, возникающих из корневой веб-страницы.
5. Пишем код и тестируем
Все, что мы обсуждали до сих пор, было подготовкой. И вот настал момент, когда код запущен и работа сделана. Код для парсинга редко работает именно так, как вы ожидаете. Это происходит потому, что не все веб-страницы, которые вы пытаетесь просмотреть, имеют одинаковую структуру. Например, вы запускаете свой скрипт на 100 страницах товаров и обнаруживаете, что только 80 из них были сохранены.
Причина этого в том, что 20 страниц могут находиться в состоянии "не на складе" и их структура веб-страницы отличается. Такие исключения не учитываются при написании кода. Но после нескольких итераций вы сможете внести необходимые изменения. И извлечь данные со всех нужных вам веб-страниц.
Альтернативные методы парсинга данных
Используйте функцию фильтра Excel для отбора данных
Это самый простой способ извлечения данных с любой веб-страницы. Он не требует никаких дополнительных инструментов, кроме Excel, и не оставляет следов на целевом сайте или в вашей системе, т.е. не выполняются вызовы API, не устанавливаются cookies и т.д. Если у вас есть доступ к ПК/Mac с установленным Excel, то это, безусловно, самый простой способ сбора данных.
Как это работает
В Excel откройте новый лист и напишите в первой ячейке URL целевого сайта. В следующей ячейке введите формулу фильтра данных HTML или XPath (формулу фильтра данных XPath, используемую в данном примере, см. в таблице ниже), которая будет извлекать данные с целевой веб-страницы. Если вы хотите сохранить несколько столбцов данных, повторите Шаг 1 для каждого столбца данных и расположите их рядом.
Как получить фильтры данных XPath в Excel
- В Excel нажмите Файл > Параметры > Дополнительно, затем перейдите в раздел Отображение. Установите флажок "Показывать вкладку "Разработчик" на ленте" и нажмите OK.
- В Excel щелкните Developer > Reference, затем прокрутите вниз и найдите Microsoft XML Document 3.0.
- Нажмите на MSXML3 Apress, затем нажмите OK.
- Теперь, когда у нас установлен MSXML3 Reference, давайте попробуем. В Excel введите URL целевой веб-страницы в ячейку A1, а затем формулу XPath Data Filter в ячейку B1 (например, чтобы получить цену товара "123" на веб-странице, введите формулу XPath Data Filter в ячейку B1)
- Теперь скопируйте содержимое ячейки B1 во все оставшиеся ячейки с помощью сочетания клавиш CTRL+C в Excel.
- Скопируйте URL-адрес целевой веб-страницы (в ячейке A1) в адресную строку Excel. Нажмите Enter, чтобы загрузить ее в браузер, и увидите, как ваши данные волшебным образом появляются в Excel.
Как видите, это чрезвычайно эффективный способ сбора данных. На целевом сайте или в вашей системе не остается никакого следа, т.е. не выполняются вызовы API, не устанавливаются файлы cookie и т.д.

Использование функции "Текст в столбцы" в Microsoft Word для разделения данных по столбцам
Этот метод немного сложнее первого, но его можно использовать для сопоставления данных с любого сайта, на котором есть четко определенные колонки. Для его применения требуются MS Word и Excel, а также некоторые дополнительные инструменты, которые описаны ниже. Плохой новостью является то, что этот метод оставляет следы на целевом сайте, поэтому, если вы занимаетесь парсингом данных с сайтов в маркетинговых целях и хотите избежать обнаружения, этот метод не для вас.
Как это работает
- В MS Word создайте новый документ, затем скопируйте/вставьте целевую веб-страницу в текстовое поле.
- Выберите функцию Goto в MS Word, нажав CTRL + G, затем введите <<!DOCTYPE HTML [ENTER].
- Выберите функцию Run в MS Word, нажав ALT + F5, и вы должны увидеть примерно следующее.
- В Excel выберите Фильтры > Текст в столбцы
- Выберите Delimited и выберите разделитель из выпадающего меню (в данном примере мы используем Comma, который выбран по умолчанию).
- Теперь нажмите Далее и определите расположение "запятых", т.е. разделите веб-данные на колонки (например, я использую "," в качестве разделителя).
- Затем нажмите Далее и определите, как Excel будет обрабатывать пустые ячейки: игнорировать их или заменять пустым значением (для данного примера мы установим значение "игнорировать пустые значения").
- Затем нажмите кнопку Готово, чтобы завершить работу функции преобразования текста в столбцы.
- Если ваша целевая веб-страница не имеет четко определенных колонок, вы можете установить значение "Заменять значения".
Как видно, мои данные были успешно разделены на отдельные колонки текста, и теперь я могу легко скопировать/вставить их в другое место на моем компьютере.
Этот метод особенно полезен для извлечения данных из файлов PDF, которые обычно имеют четко определенные заголовки столбцов. Это сэкономит вам много времени, если вашей целью является автоматическое извлечение данных из нескольких PDF-файлов с помощью макросов Excel, поскольку теперь вы можете использовать один и тот же шаблон MS Word снова и снова для быстрого создания нескольких документов для каждого PDF-файла.
Используйте редактор MS Excel VBA для извлечения данных
Для этого метода мы будем использовать инструмент под названием xvba, который можно загрузить с официального сайта, и он работает так же, как API (Application Program Interface). Хорошая новость заключается в том, что вам не нужно писать никакого кода. Плохая новость заключается в том, что вам придется ввести HTML целевой веб-страницы, т.е. я бы предложил сделать это с помощью MS Word, потому что это заставит вас действительно разбить вашу веб-страницу на компоненты.
Числа в квадратных скобках - это отдельные ячейки в электронной таблице, где заголовки столбцов и строк использовались в качестве названий для каждого поля данных. Они действуют как переменные, т.е. рассматриваются Excel как текст и будут меняться в зависимости от того, как структурирована ваша электронная таблица (например, если вы выберете другой столбец для фильтрации данных).

Использование IMPORTXML в Google sheets
Если вы используете IMPORTXML для сопоставления данных с веб-страницы.
- Первым шагом будет открытие Google Sheets.
- Второй шаг - перейти в меню Инструменты > Редактор сценариев.
- Третий шаг - скопировать/вставить HTML-код целевого веб-сайта в текстовое поле.
Мои данные были успешно разделены на отдельные колонки текста, и теперь я могу легко скопировать/вставить их в другое место на моем компьютере.
В прошлом мы использовали этот метод для сбора данных Facebook и Twitter для маркетинговой кампании в Интернете. Это также хороший способ сопоставления данных с веб-сайтов, использующих AJAX, когда вы не хотите использовать команду GOTO.
Использование IMPORTHTML в Google Sheets
Этот метод похож на метод выше, но вместо IMPORTXML мы будем использовать IMPORTHTML.
- Первым шагом будет открытие Google Sheets.
- Второй шаг - перейти в меню Инструменты > Редактор сценариев.
- Третий шаг - скопируйте/вставьте HTML-код целевого сайта в текстовое поле.
Использование расширений Chrome
Вы можете парсить веб-данные с помощью расширений chrome, таких как Data Scraper и Save To CSV. Поскольку существует бесплатная и платная версия расширений для хрома (Data Scraper), я бы предложил использовать обе версии, чтобы понять, какая из них вам больше подходит.
Заключение
Обязательно делайте перерыв в несколько секунд между каждым запуском. Парсинг веб-сайта раз в месяц будет отлично работать с DIY-решением, написанным на Python. Но если вы ищете DaaS-решение корпоративного уровня, наша команда в ESK Solutions предлагает комплексное решение, где вы предоставляете нам требования, а мы передаем вам данные, которые вы можете подключить и работать.
Инфраструктура, управление прокси, обеспечение того, чтобы вас не заблокировали во время сбора данных. Запуск механизма парсинга по расписанию с регулярной частотой для обновления данных. Мы также вносим изменения в соответствии с изменениями, внесенными в пользовательский интерфейс соответствующего сайта.
Все это осуществляется в рамках нашего полностью управляемого решения. Это облачный сервис с оплатой по факту использования. Она удовлетворит все ваши потребности в парсинге сайтов. Неважно, вы стартап, крупная корпорация или вам нужны данные для исследовательской работы. У нас есть решения по парсингу данных для всех. Так же приглашаем вас за уникальной веб-разработкой по техническому заданию клиента.


