Парсили сайты, парсим и будем парсить. И не нужно этому мешать

Здравствуйте, меня зовут Максим Кульгин. Моя компания xmldatafeed.com занимается парсингом много лет. На днях мы вернули 16 000 руб. клиенту, так как не смогли парсить весь iherb.com с нужной клиенту скоростью (а там очень много товаров). Проверил и оказалось, что это единичный случай за весь год и родилась эта, чуть-чуть философская статья.

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

А надо ли вообще бороться против парсинга?

373a2ab01ab03b189dd5d95c515204a2.webp

Любая современная технология имеет своих противников — тех, кто в силу объективных или субъективных причин не желает, чтобы в мир привносилось что-то, меняющее сложившийся порядок вещей. Такое происходит не первый раз в истории. Достаточно вспомнить луддитов, которые ломали станки во время промышленной революции, полагая, что машины являются злом, порождающим безработицу.

cea7dfc7e5c03f986ed0561121e90daa.webp

А что же парсинг? Оправдано ли проводить подобные параллели?

За последние годы информация стала по сути настоящим золотом. Вместе с тем как наша жизнь всё в большей степени переходит в цифровую сферу — всё большие объемы информации оказываются доступными во всемирной сети. Неужели стоит удивляться тому, что огромное количество людей: исследователей, предпринимателей, журналистов и политиков — хотят урвать свой кусок от этого пирога?

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

Итак.

Парсинг по устоявшейся в российском интернете терминологии включает в себя по сути два процесса:

  • чтение и обход имеющихся на веб-странице ссылок (crawling);

  • вычленение нужной информации из каждой посещенной страницы (scraping).

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

Совершая обход по ссылкам, робот воссоздает истинную карту сайта. Подобным образом трудятся роботы поисковых систем:  Google,  Ya.ru (бывший Yandex — прощай, эпоха!),  DuckDuckGo и другие — создавая карту целого интернета.

Извлечение данных из страниц, полученных по ссылкам, найденным на предыдущем этапе — не самая трудная часть работы. Какими бы сложными или разрозненными данные не были: будь то список товаров, прайс-лист или все конкуренты в городе — они в любом случае структурированы хотя бы на уровне HTML-разметки, и чтение легко осуществляется с помощью специализированных языков, таких как например, XPath.

Главная задача — получить страницу по найденным ссылкам. Причем получить страницу неподдельную, не забитую намеренно искаженной информацией.

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

Поначалу парсеры создавались с использованием уже существующего популярного языка программирования общего назначения, такого как Python или JavaScript, и опирались на узкоспециализированные инструменты, такие как Selenium или PhantomJS. Создание парсера «вручную» требовало уверенного владения навыками программирования и работало только для одной задачи. По мере лавинообразного увеличения спроса на сбор данных стали появляться онлайн-сервисы, предоставляющие исключительную по своей уникальности услугу — настройку парсинга за считанные минуты и полностью без программирования.

Владельцам сайтов, конечно, не понравилось, что созданные с таким трудом данные могут быть легко и бесплатно взяты и использованы кем-то ещё. И они начали противодействовать парсингу всеми доступными способами. Шли годы, и изощренность методов борьбы как с той, так и с другой стороны не пришла бы в голову ни одному писателю-фантасту.

285a02c7e86ec807f4ca271972acdf43.webp

Это противостояние не закончится в обозримом будущем. Быть может стоит остановиться на мгновенье и подумать:, а есть ли смысл в этой борьбе? И не служит ли парсинг в итоге интересам самих владельцев веб-сайтов?

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

Ферма для создания пула мобильных прокси. Эта самая маленькая, кстати. И мы с помощью таких ферм парсим.Ферма для создания пула мобильных прокси. Эта самая маленькая, кстати. И мы с помощью таких ферм парсим.

Каждый такой запрос содержит данные о браузере (так называемый User agent), и в теории веб-сервер может определить кто именно к нему обращается да и отклонить запрос, если это не человек. (О, будущее!) Однако современные парсеры легко обманывают сервер, притворяясь обычными браузерами.

Хитрый веб-сервер может начать что-то подозревать, если с одного и того же компьютера или IP-адреса начнут поступать запросы слишком уж часто. Но его снова можно быстро успокоить, если задействовать прокси-серверы (имеющие разные IP-адреса) и подсовывать поддельные данные о браузере. Да ещё и делать это через случайные промежутки времени.

Некоторые веб-серверы отдают данные, используя JavaScript (то есть данные возникают прямо в браузере пользователя и их не удастся отыскать в разметке HTML). Ну, так парсер загрузит то, что ему дадут и точно так же выполнит JavaScript-код перед тем, как начать читать данные — вот и нет никакой разницы!

Бывает, что вебмастера постоянно меняют атрибуты элементов, их взаимное расположение, изобретают трюки с HTML-кодом, внедряют альтернативные форматы передачи данных и даже подбрасывают поддельные данные. Такие действия призваны запутать, усложнить жизнь тем, кто для извлечения данных опирается на строение дерева DOM.

(DOM, Document Object Model — описывает взаимосвязи элементов на веб-странице: от кнопочек и галочек до картинок и расположения элементов для разных устройств).

К сожалению (или к счастью), такие постоянные изменения очень незначительно задерживают парсинг страницы, а уж вовсе его остановить не могут и тем более.

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

У специалистов по парсингу имеются целые пулы готовых email-адресов, а роботы уже приняли низкий старт и только ждут отмашки, чтобы нажать на кнопочку «Подтвердить регистрацию». Технологии, основанные на машинном обучении, быстрее любого пользователя найдут светофор даже на помпоне у верблюда. Уже не говоря о помощи со стороны жителей стран с низкой оплатой труда, которые объединяются в целые виртуальные фермы для разгадывания ребусов и готовы выручить искусственный интеллект, если вдруг вместо верблюда потребуется распознать что-то неведомое.

— Рекламная кампания прошла удачно. Ожидается нашествие пользователей.

— Пусть только те попадут на наш сайт, кто не спутает горы и каньоны. А половине вообще скажите:»404 — нет такого сайта».

— Может, хотя бы дать им подсказку, как попасть на наш сайт?

— Нет! Они от нас только этого и ждут!

Пользователь должен быть счастлив — таков закон современного Веба.

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

— Но это же для защиты содержимого нашего сайта от парсинга!

— Парс… Что вы сказали? Нам нет до этого дела!

Результат борьбы против парсинга очевиден: посетители просто закрывают страницу и идут дальше. Оправдано ли ежечасное снижение посещений только для того, чтобы попытаться остановить автоматизированное чтение контента? Учитывая, что остановить его невозможно. Это же натуральная стрельба из пушки по воробьям!

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

— Содержание сайта всё дорожает и дорожает…

— Так давайте сделаем его ещё дороже!

Каждая дополнительная проверка на сервере привносит задержку и потребляет дорогостоящие ресурсы. Каково это проверять всех посетителей на подозрительность?!

Например, чтобы просто определить, что кто-то запрашивает страницы сайта излишне часто, необходимо отследить аналогичные действия всех посетителей за всё время (а только так и можно выявить отклонения). Все поняли? Надо записывать каждый запрос из сотен или даже тысяч IP-адресов, вычислять средние значения для разных групп, которые и выявляются-то не сразу, обновлять результаты расчетов… Не забываем, что решение о попадании очередного посетителя в допустимые рамки должно приниматься «на лету» и откусывать лишь столько вычислительных ресурсов у сервера, чтобы это не отражалось на скорости отдачи страниц.

656b2ce50a158458f4d228438d1467b5.webp

Ещё одна угроза — собственная реализация этого дела. Одно некорректное изменение кода — и все пользователи заблокированы! Это не фантастика, такое уже случалось не один раз. Причем фильтр пропускал администраторов и не сразу удавалось понять, почему никто не приходит на сайт. Ошибка в реализации может сыграть и в любую другую сторону: от «перегруза» до «дыры в безопасности». Понадобится очень хороший калькулятор потерь.

А как насчёт роботов, которые напускают на сайты эти ребята: Google, Bing, Yand… (Ах, да! — Ya.ru), DuckDuckGo и другие? Их тоже заблокировать? Конечно, это глупый вопрос. Заблокировать поисковых роботов — всё равно, что заблокировать свой бизнес. Значит, надо как-то отличать одних роботов от других. Хороших от плохих. Да, ещё не забыть, что плохие будут мимикрировать под хороших.

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

А ещё можно просто не противодействовать парсингу.

— Внимание! Запуск нашего стартапа откладывается. Все разработки — в сторону! Все силы — на борьбу с парсингом! Это важно.

Добавление защиты от парсинга означает, что команда будет занята или изобретением защиты, или её реализацией, или тестированием, или мониторингом трафика.

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

Каждый бизнесмен хочет, чтобы его продукт выходил на рынок быстрее конкурентов, регулярнее конкурентов и качественнее конкурентов. Подчас это единственный способ заинтересовать и привлечь клиента. Добавление к списку функций для реализации ещё одной функции — пресловутой защиты от парсинга — означает задержку в реализации всех других функций. А есть ли среди этих «других функций» такая, которая по важности уступает этой защите? Вряд ли.

В самом деле. Во что обойдется подобная разработка, принимая во внимание все технологии, которые находятся на вооружении у «той» стороны?

— Они парсят мой сайт! Накажите их!

— «Они» это кто? Посетители? Поисковые роботы? Мы ничего не можем сделать, это не запрещено законом.

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

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

Во-вторых, поскольку невозможно провести юридически ясную черту между хорошими и плохими роботами, между браузером пользователя и браузером робота, то общепринятым подходом считается: всё что может быть прочитано законным способом — может быть прочитано с помощью любых инструментов.

Есть, конечно, много нюансов. И ситуация с ВКонтакте и Даблом тому лишнее подтверждение. Парсинг хоть и разрешен сам по себе, он не означает отмену авторского права, его автоматическую передачу или копирование.

И снова начинают превалировать юридические тонкости. Это очень непростая, обширная тема, достойная отдельной статьи. Мы работаем по-белому, соблюдаем все требуемые государством формальности при работе с данными, имеем большой опыт, а потому бизнес, который заказывает у нас парсинг, находится в полной безопасности.

Сейчас даже прорабатываем идею — маркетплейс по продаже разных баз данных, которые в том числе накопились за время нашей работы. Что-то вроде «Ozon» для бизнеса — несколько миллионов баз данных по разным темам и странам. Это не опечатка: «миллионов»! К нам постоянно обращаются за подобными «покупками» — мы идем навстречу. Но есть мечта — поднять продажу баз данных на небывалый уровень как по доступности для бизнеса, так и по удобству выбора. Какова идея?!

Поисковики парсят сайты на регулярной основе. Но их роботы не единственные, кто читает и собирает открытые данные. Даже если начать составлять список с самых крупных парсеров, мы быстро потеряем счет: Google, Bing, DuckDuckGo, Ya.ru (раньше назывался Яндекс), Baidu, Sogou, Exalead, Alexa, социальные сети…

Есть даже такая технология как Microformats, призванная помогать парсерам лучше понимать кусочки текста на веб-страницах. Многие сайты с удовольствием используют её для привлечения новой аудитории.

— А давайте поставим сервер в лесу. И ни к чему подключать его не будем. И никого не пустим. И никому не скажем…

Также есть всякие специализированные агрегаторы, собирающие узконаправленные виды данных: цены на товар или услугу, новости, блоги… Привлечь нужного агрегатора или даже предпринять усилия, чтобы публиковаться на его страницах — прекрасная возможность для продвижения сайта. Агрегатор — это как маленький специализированный Google.

Если хочется сухих цифр — пожалуйста:  93% трафика сайты получают из поисковых систем, агрегаторов и прочих участников рынка.

А кто это делает? Кто побывал на сайте и привел на него за руку клиента? Кто сделал это не просто бесплатно, но и вообще незаметно? Ответ — роботы! Это их-то предлагается отлавливать и не пущать?!

— Так. Ясно. Понятно. Кто тут парсингом занимается?

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

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

Чтобы всего этого добиться, надо на регулярной основе парсить новости, специализированные площадки, социальные сети, ленты… Собирать данные, обрабатывать их, анализировать… — только так можно узнать и результат рекламной кампании и подкорректировать его.

Речь идет об эффективном использовании астрономических денежных сумм. Да, это всё парсинг.

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

Всё меняется. SEO тоже меняется. (SEO, Search Engine Optimization — искусство понравиться поисковикам.) Это не просто приход MUM на смену BERT (MUM и BERT — поисковые алгоритмы Google). Все понимают насколько важно оказаться на первой странице поисковой выдачи. А как это сделать, если не использовать правильные ключевые слова и фразы? И как наилучшим образом собрать «правильные слова и фразы», если не парсингом ресурсов, на которых живет целевая аудитория? И это тоже всё роботы!

Лидогенерация — ещё одна совершенно новая область маркетинга.

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

(PPC, pay per click — рекламодатель платит не за показы, а за переходы по рекламным объявлениям. Кстати, если ваши конкуренты натравили роботов делать пустые клики по вашей PPC-рекламе, то есть надежная защита от этого — clickfraud.ru).

Другими словами, современный парсинг позволяет привлекать новый трафик, продвигать свою услугу или продукт, оптимизировать присутствие в Интернете — и всё это значительно более дешевыми и точными средствами.

Давайте отвлечемся от рыночных представлений и взглянем на парсинг ещё с одной точки зрения — с научной.

— Британские ученые установили, что самое большое количество витаминов содержится в аптеке.

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

Если сайт не препятствует парсингу, то он делает свой маленький вклад в развитие науки и человечества. Хотя это и осознать трудно, и поверить в это тоже нелегко.

— Короче…

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

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

Большинство стран считает парсинг законным. И даже если в какой-то стране законодатели посмотрят иначе, аутсорсинг мгновенно решает все трудности. Если надо защитить авторский контент, то законы для его охраны уже есть во всех развитых странах и здесь не нужно ничего изобретать.

Как думаете, почему к нам приходят крупные компании с заказом на парсинг? Причина абсолютно не в том, что мы лучшие в парсинге. А в юридическом желании вынести «сбор данных» за контур организации по требованиям акционеров–безопасников–юристов.

Подавляющее большинство визитов людей на сайт обеспечивают роботы, заранее там уже побывавшие, прочитавшие и осмыслившие (в силу своих способностей) его содержимое. Лучше сделать API (Application Program Interface — программный интерфейс) для доступа к своим данным, чем закрываться от мира и терять потенциальных клиентов.

Интернет меняет мир. Парсинг меняет интернет. Мы,  xmldatafeed.com — часть глобального парсинга на постсоветском пространстве:) :). Всё это называется прогресс. И его не остановить. Тема очень дискуссионная, и я призываю всех высказываться в комментариях. Мы всё равно не придем к единому мнению. Но обмен взглядами — это тоже прогресс.

Где можно почитать больше информации? Я регулярно пишу в Телеграмм наш опыт. Подписывайтесь, если хотите посмотреть на «изнанку» ИТ бизнеса в России или пишите мне с вопросами @maximkulgin.

© Habrahabr.ru