Oops... your message was not sent

Your message has been successfully sent

тематические истории, основанные на опыте компании JetRuby
Веб-разработка

Лучшие методики веб-скрапинга

Приветствуем всех читателей нашего блога. Сегодня мы продолжим тему скрапинга веб-сайтов. Что в мире ценится превыше всего? Разумеется, информация. Особенно в 21-м веке — веке инновационных технологий, мощных гаджетов и программных разработок. Если же быть совершенно точным, самой дорогой вещью является умение использовать информацию для принятия своевременных решений. Это касается всех сфер жизнедеятельности человека и всех отраслей бизнеса.

Прежде чем начать разговор о возможностях, технологиях и методиках современного скрапинга веб-сайтов, озаботимся постановкой проблемы. Поехали.

Постановка проблемы

Постоянная оптимизация интернет-ресурсов под мобильные устройства, растущие скорости интернета, технологические решения на уровне “железа” и программного кода, а также дизайнерские поиски сделали всемирную паутину такой, какой вы видите ее сегодня. А именно — красочной, контрастной, переполненной нужной и абсолютно бесполезной (порой даже вредной) информацией. Это разнообразие техник и технологий в реализации веб-сайтов и является основной проблемой, которую необходимо решить при организации доступа к данным.

Теперь ближе к делу. Доступ к целевому контенту может быть организован по двум основным направлениям:

  • С использованием API, когда собственники информации передают ее юзерам на основе личной заинтересованности — подписки, рассылки, партнерские программы и т.д.
  • Без использования API — путем разбора веб-страниц методом скрапинга (если, конечно, это предусмотрено их кодом).

Первое направление ограничивается только денежными ресурсами, и потребитель  не испытывает сложностей в плане технической реализации. Данные, получаемые посредством API, четко структурированы и нормализованы. К примеру, в форматах XML или JSON.

Второе направление — веб-скрапинг — заслуживает большего внимания и является своего рода “вызовом” для разработчиков и математиков. Автоматическая обработка текста с использованием искусственного интеллекта, семантический анализ и т.д. — все это можно назвать колоссальным технологическим прорывом, требующим освоения, осознания и компетентной оценки.

И все же — какой подход лучше? Все зависит только от ваших потребностей и ресурсов (денежных, разумеется). Мы же разберем, как плюсы, так и минусы каждого подхода. Вперед, вас ждет много интересного!

Ручное копирование контента

Самый простой метод веб-скрапинга — это ручной поиск нужной информации с последующим копированием и сохранением по месту назначения (локализация в документе, публикация на собственном ресурсе, размещение в базе данных и т.д.).

Такой способ подходит для небольших блогов или мелких магазинов со скудным ассортиментом однотипных товаров.

Преимущества:

  • Высокое качество контента и его целевая адаптация под нужды потребителя.
  • Высокая скорость поиска.

Недостатки:

  • Возможности человека существенно ограничены его физическими ресурсами, знаниями целевой сферы и банальными навыками поиска в Интернете (далеко не все умеют эффективно использовать инструменты поисковых сервисов).
  • Человек подвержен различным внешним воздействиям (психологическим, физическим и т.д.), а это отрицательно сказывается стабильности его работы и стоимости его услуг.
  • Ограниченность скрапинга до нескольких сотен качественных результатов в день.

Регулярные выражения и захват соответствий в тексте

Очень простая техника обработки текстовых данных и, в то же время, мощный метод извлечения информации из Интернета. Особенно в сочетании с использованием UNIX команд захвата (к примеру ‘curl’). Регулярные выражения присутствуют во многих языках программирования (мы, например, реализовали веб-скрапинг с использованием этого метода для нескольких проектов на Python и Ruby).

Представленный способ подходит для проектов, которые занимаются автоматическим мониторингом нескольких источников информации. Допустим, скрапинг отдельных фрагментов (название товара, его стоимость, телефоны и адреса электронной почты и т.д.). На практике реализация скрапера для одного сайта может занять около часа. Правда лишь в том случае, если целевой ресурс не содержит подводных камней в виде JS рендеринга.

Преимущества:

  • Если вы уже знакомы с регулярными выражениями хотя бы одного языка программирования, то реализация этого решения займет минимум времени.
  • Регулярные выражения позволяют быстро изымать большое количество ненужных минорных “нечеткостей” из тела результата, не поломав основной контент (к примеру, очистить остатки HTML кода).
  • Регулярные выражения поддерживаются почти всеми языками программирования. И, что самое главное, их синтаксис от языка к языку почти не меняется. Это позволяет осуществлять безболезненную миграцию проектов на языки с большей производительностью и ясностью кода (к примеру, с PHP на Ruby — в последнее время таких клиентов становится все больше).

Недостатки:

  • Регулярные выражения могут превратиться в головоломку для тех, кто их раньше не использовал. В таком случае лучше сразу обратиться к специалистам. Как правило, проблемы возникают при интеграции решений на одном языке в другой или при миграции проектов на другой язык программирования.
  • Регулярные выражения зачастую весьма сложны для чтения и анализа. Иногда, исходя из специфики обрабатываемой информации, они чрезмерно растягиваются.
  • Если на целевом ресурсе был изменен HTML код или добавлен новый тег, скорее всего придется менять и регулярное выражение (иначе есть большой риск получить “битый” контент).

HTTP-запросы (разбор HTML кода)

Этот метод позволяет получать  динамические и статические страницы путем отправки HTTP запросов к удаленным серверам. Он использует программирование сокетов и разбирает полученные ответы с помощью (при необходимости) заранее подготовленных данных о целевых контейнерах (их классы и ID).

Инструмент подходит для большинства проектов. Он немного сложней в реализации, однако это компенсируется возможностью быстрого получения большого количества данных.

Преимущества:

  • Позволяет получить оригинал страницы в виде HTTP-ответа.
  • Огромное количество результатов, ограниченных только ресурсами серверов и скоростью Интернета.

Недостатки:

  • Требуется обработка полученных ответов — результаты могут содержать много лишнего.
  • Многие сайты оснащены защитой от подобных “роботов” (в качестве выхода из ситуации следует генерировать дополнительную служебную информацию в заголовке  HTTP-запроса, впрочем, не все сайты можно обмануть таким образом).
  • Высокая вероятность оказаться забаненным администратором целевого сайта или автоматизированной системой защиты при появлении странного методично повторяющегося “интереса” к ресурсу. Практика показывает, что количество и частота запросов может превосходить человеческие возможности.
  • Удаленный сервер может быть отключен или занят на момент отправки запроса. В результате появляется вероятность большого количества ошибок типа TimeOut.

Разбор DOM структуры на основе скраперов экрана

Динамический контент — один из проблемных моментов веб-скрапинга. Как с этим бороться? Для его получения можно использовать любой полноценный веб-браузер, который воспроизведет динамический контент и скрипт на стороне клиента. Существуют готовые плагины. Они работают бесплатно и выдают неплохие результаты. Правда, с одной оговоркой: невысокая эффективность. Всего один результат за раз. На самом деле, подобные плагины решают массу проблем и позволяют забыть о таких вещах, как куки, регулярные выражения, HTTP и пр.

Разбор Dom структуры на основе скраперов экрана подходит для больших и средних проектов, заинтересованных, как в качестве, так и в количестве добытой информации. Реализация автоматизации этого метода довольно сложна с технической точки зрения. Однако наша команда сумела достичь поставленной цели и от проекта к проекту совершенствует разработанный функционал. Для этого был написан эмулятор браузера и обработчик его “виртуального экрана” с интеллектуальным поиском узлов в DOM структуре.

Преимущества:

  • Получение динамического контента.
  • Автоматизация. Она позволяет получать качественный контент в больших объемах.
  • Возможность реализации коммерческих решений. Метод позволяет безгранично пользоваться их саппортом для решения проблем с купленным/арендованным ПО.

Недостатки:

  • Сложность и загруженность сервера при автоматизации делает процесс довольно ресурсоемким, как в разработке, так и в серверных затратах.  
  • Сложность реализации. Для неспециалистов она практически невозможна, т.к. требует доскональных знаний “железа”, основ веб-разработки и совершенное владение хотя бы одним из серверных языков программирования.
  • Большая часть реализаций этого метода распространяется только на коммерческой основе, а стоимость таких продуктов пока не имеет тенденции к снижению.

Методы искусственного интеллекта и онтологий

Представьте, что перед вами стоит задача скрапинга сотен или тысяч сайтов. При этом они имеют различную верстку и написаны на разных языках и фреймворках. В такой ситуации рациональнее всего будет инвестировать средства в разработку сложных систем искусственного интеллекта и/или онтологий (этот метод основан на теории о том, что все сайты можно разбить на классы и группы с подобной структурой и набором технологий).

Преимущества:

  • Однажды созданная сложная система позволяет получить максимально качественный контент от огромного числа доменов, даже невзирая на небольшие изменения на страницах (интеллектуальная система подправит возможные неточности). Оценка качества для 150 тыс. доменов в среднем будет составлять от 75% до 93% (проверено на исследованиях JetRuby в реализованной системе).
  • Метод позволяет нормализовать результат, полученный со всех источников под вашу структуру базы данных.
  • Несмотря на то, что такая система нуждается в постоянной поддержке (на уровне мониторинга), при возможных сбоях она требует незначительного вмешательства в код

Недостатки:

  • Сложная реализация “движка”, требующая высокого уровня знаний в математике, статистике, сфере нечеткой логики.
  • Высокая стоимость разработки.
  • Сопутствующие затраты на поддержку и обучение системы.
  • Практика подписок на готовые коммерческие проекты. Имеется в виду ограниченное число запросов и их высокая стоимость (заметим, что  собственная разработка окупается быстро).
  • Необходимость предусматривать модули отслеживания ошибок, валидности данных и резервные прокси серверы для возможного обхода “блэк листа” целевого сайта.

Резюме

В этой статье мы рассмотрели самые эффективные и актуальные методики веб-скрапинга. Огромное количество IT компаний, в том числе и мы, использует вышеперечисленные методы, руководствуясь собственным опытом, знаниями и умениями. Все зависит от сферы вашего бизнеса и ваших потребностей в информации. Выберите свой способ обработки информации и наслаждайтесь этой волшебной технологией. Есть вопросы? Обращайтесь к нам напрямую.

И не забывайте: кто владеет информацией — тот владеет миром!

department
Статью подготовил
Отдел веб-разработки
Профессиональная разработка сайтов и приложений на стороне сервера и клиента. Проектирование дизайна, верстка страниц и техническое обслуживание реализованных проектов.
New Articles