{"id":14268,"url":"\/distributions\/14268\/click?bit=1&hash=1e3309842e8b07895e75261917827295839cd5d4d57d48f0ca524f3f535a7946","title":"\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c \u0438\u0433\u0440\u0430\u0442\u044c \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043c\u0435\u0441\u0442\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e?","buttonText":"\u0423\u0437\u043d\u0430\u0442\u044c","imageUuid":"f71e1caf-7964-5525-98be-104bb436cb54"}

Можно ли защитить свой сайт от парсинга? Нет, и вот почему

Моя компания занимается парсингом интернет-магазинов в России уже более трёх лет, ежедневно мы парсим около 400 крупнейших сайтов в РФ. И еще не встречали защиты, которую мы не смогли бы обойти.

За последние годы мы реализовали множество проектов, связанных с получением данных крупнейших сайтов. Это, например, HeadHunter, «Яндекс.Еда», Beru.ru, «Ламода». И сегодня спрашиваем сами себя — можно ли защититься от этого? Более того, к нам уже обращаются компании, которые просят проверить свою защиту от парсинга "извне" так сказать. Расскажем чуть подробнее сложности, с которыми вы столкнетесь, если решите заняться защитой от парсинга.

Вначале - что такое Скрапинг, или парсинг? Это сбор данных с различных интернет-ресурсов. Общий принцип работы можно объяснить так: боты обращаются к открытым страницам целевого сайта, получают HTML-код, разбирают его на составляющие (парсят), ищут нужные данные и сохраняют в своей базе данных. Таким образом получается «чистая» копия данных, хранящихся на сайте, — товаров, резюме, изображений, текстов. Если над одним сайтом проводить парсинг регулярно, то можно отслеживать изменения. Например, наблюдать за изменением цен или товарных запасов. Самыми заметными парсерами являются поисковые системы. «Яндекс» и Google напрямую занимаются парсингом: они заходят на сайт и индексируют его — собирают информацию. Защищаясь от парсинга, подумайте — не заблокируете ли вы заодно и свое присутствие в поисковиках и любимый SEO?

У людей, далеких от IT, присутствует эдакое идеализированное представление о программировании как в компьютерных играх 80-х: вы надеваете шлем виртуальной реальности и погружаетесь в «Матрицу». На самом деле вся информация и все взаимодействия — это нули и единицы. Здесь нет ничего человеческого. Нет различия между данными, введенными компьютером или человеком.

Для вашего веб-сервера все равно, кто запрашивает данные — бот или человек. Оба они делают это одинаково. Если посетители могут получить доступ к контенту на вашем сайте, то и наш бот сможет получить такой же доступ (с вероятностью 99%). Все технологические решения против парсинга могут помешать реальным пользователям в той же мере, что и ботам.

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

Техническая защита от парсинга

Блокировка "плохого" юзер-агента

Любой запрос к веб-серверу содержит заголовки, в том числе данные о браузере — так называемый юзер-агент (user agent), идентификатор клиента.

Решение: заголовки меняются произвольным образом и любой бот может имитировать реальных пользователей. Более того, на нашей стороне HTTP-заголовки рандомизируются (если это необходимо) между сеансами парсинга, поэтому так заблокировать бот невозможно.

Блокировка IP-адресов

Хорошо, заголовки можно произвольно менять, но невозможно менять IP-адрес, с которого обращается клиент. Можно же определить адреса ботов и заблокировать их?

Решение: «поддельные» IP-адреса — прокси. Это более сложно, чем подмена HTTP-заголовков, но тоже ничего экстраординарного. Мы используем комбинацию из ротации запросов и ротации IP-адресов, чтобы избежать идентифицируемых шаблонов поведения бота. У нас есть доступ к большому количеству IP-адресов, к тому же, как и в предыдущем случае, по IP-адресу отделить ботов от живых пользователей практически невозможно.

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

Использование капчи (captcha)

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

Решение: API для решения капчи. Капча только добавит неудобств обычным пользователям. Все методы капчи (в том числе для reCAPTCHA от Google) легко обходятся с помощью сторонних сервисов, вроде 2Captcha, в которых реальные люди решают задачи, поставленные перед нашими ботами. Стоимость услуг минимальна (например, 100 рублей за 1000 задач).

Невидимая капча

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

Нет единого рецепта, как это реализовать. Различные провайдеры используют разные параметры для профилирования пользователей. Эта услуга предоставляется некоторыми CDN (например, Cloudflare) и традиционными провайдерами капчи, например Google reCAPTCHA.

Решение: даже пока не требуется, так как технология на самом деле не работает для ботов, а обычным пользователям только мешает (иногда).

По словам бывшего руководителя отдела Google по распознаванию кликфрода Шумана Гоземаджумдера, невидимая капча «просто создает новый тип задач, с которыми продвинутые боты по-прежнему справляются, а для людей они становятся большой проблемой».

Проверка электронной почты

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

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

Изменение структуры сайта

Сайт может время от времени менять структуру, и в ответ на запрос HTML-код будет меняться.

Решение: на самом деле это самый дурацкий способ защиты. В большинстве случаев современные методы парсинга не сильно (если вообще) зависят от структуры сайта. Даже если предположить, что наши процессы зависят от структуры веб-сайта, то:

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

Что еще можно применить?

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

Но все они либо также достаточно понятно обходятся (с помощью других фреймворков или системных утилит), либо катастрофичны для бизнеса с точки зрения пользовательского опыта (представляете магазин на Flash в 2019 году?). Так что мы в данной статье их рассматривать не будем. Если хотите обсудить — напишите в комментариях, и я расскажу подробнее о каждом случае.

Блокировка 98% парсеров

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

Стоит ли это ваших усилий? Ответ зависит от следующих факторов:

  • Какое влияние оказывают боты на ваш сайт/бизнес?
  • Повлияет ли это на реальных пользователей?

Чаще всего ответ заключается в том, что оно того не стоит.

Моральная защита

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

Боты создают нагрузку

Скорее всего, правильно и разумно спроектированные боты обращаются к сайту 1–2 раза в секунду, что никакой нагрузки на сайт, который должен выдерживать сотни запросов в секунду, не создает. Да, есть "умельцы" которые совершенно не думают о владельцах сайтов и запускают парсинг в 100 потоков формируя просто запредельную паразитную нагрузку.

Вы тратите деньги компании, которая содержит сайт!

В общем случае — тоже нет. Электронный магазин или каталог товаров ничего от парсинга не теряет: трафик у него практически неограниченный, нагрузки боты, как мы говорили выше, не создают.

Безусловно, есть частные случаи. Например, мы хотели анализировать цены на авиабилеты, но оказалось, что получение любых запросов о стоимости перелета и наличии билетов обходится агрегаторам в определенную сумму. И если парсить их, то это приведет к неким неоправданным затратам (это не точно). Для нас самих это является некой моральной дилеммой, которую мы так и не смогли разрешить, а потому билеты мы так и не парсим, хотя запросы поступают регулярно. С другой стороны, если люди создают ресурс в общий доступ, нужно быть готовым к тому, что туда "прибегут боты", если не наши, так других исполнителей. И получается, отказываясь от парсинга мы просто перенаправляем поток денег за эту услугу конкурентам :)

Парсинг сайтов незаконен!?

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

Короткий ответ: нет. Ни в России, ни в США автоматизированное получение открытой информации с сайта не является преступлением.

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

Резюме

Собирая данные с топ-100 российских eCommerce-магазинов, мы сталкивались с совершенно разными механизмами блокировок, но итог один: данные собираются.

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

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

Как мне кажется, гораздо интереснее для компании сделать и развивать свой открытый API, который будет предоставлять доступ к данным. За открытыми данными и созданием экосистем будущее.

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

0
141 комментарий
Написать комментарий...
Александр Балалеев

Разумеется в статье почти полный бред. Защита от парсеров, тем более таких примитивных есть, просто вы не ходите на такие сайты,  а маркеты и не против, чтобы их обкачивали.
Еще не очень понятно почему изменение структуры сайта не поможет? Достаточно раз в день циклично менять названия условных классов и все, до свидания.

Ответить
Развернуть ветку
KilledDebtor
Достаточно раз в день циклично менять названия условных классов и все, до свидания.

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

Ответить
Развернуть ветку
Артём Лисовский

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

Ответить
Развернуть ветку
KilledDebtor

Цену, например. По маске содержимого "руб" и максимально близко расположенное в дереве число. В крайнем случае  всегда можно страницу отрендерить и дальше обработать.
 

есть рекапча которая хоть и обходится, но дорого

Рекапча ударит по всем пользователям. Как правило важную информацию за ней не прячут, прячут личную, но это не то что кто-то сильно хочет парсить.

фреймворки аля vuejs уберут все классы и опишут всё инлайн-стилями

Что мне мешает получить нужную информацию из JS скриптов?

фб в рекламе выводит слова побуквенно отдельно по тегу на букву

Это на столько не проблема, что не понятно зачем.

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

Ответить
Развернуть ветку
Артём Лисовский

1 приложил скрин. Там руб не пахнет, отрендерите в селениуме и будете распознавать картинку?

Рекапча по дефолту включена для любого бота по запросу сайта на cloudflare, а там 10млн сайтов на минутку и на многие вы ходите по много раз в день. Как мешает вам? Никак.

Вам помешает в случае с vue отсутствие реста и наличие ssr, например. А также минификация скриптов. Попарсите рекламу фб раз такой молодец, боюсь не получится.

В итоге - похоже вы не знаете о нормальных методах защиты от парсинга. Не всё, что вы видите как ’руб.’ можно спарсить регуляркой. Хорошие защиты существуют, бот детектится достаточно просто и как только вы прошли детект(даже на базе бека), я могу отдавать вам совсем не те цены, которые надо. Речь не о банальных проверках js, а о движениях мыши, скроллах, вашей частоте и истории переходов. Да, вы можете рандомизированно имитировать действия в фантоме или селениуме, но любое неожиданное окно в духе ’нажми шифт на клаве если не бот’ на 13ой просмотренной странице выдаст вас как бота, потому что мозг не запрогаешь. Голь на выдумки хитра. Взломщики ломают двери потому что включают голову, scraping же про автоматизацию получения, а не регулярный автоматизированный взлом, такое не сработает, если компания борется с парсингом, увы.

Ответить
Развернуть ветку
KilledDebtor

Тут вопрос цели, если мне клиент поставит цель получать информацию с какого-то сайта, он получит её, вопрос цены. :)

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

наличие ssr

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

’нажми шифт на клаве если не бот’

ни разу не видел ни на одном ресурсе, что бы подобное выскакивало при просмотре контента. Вы фантазируете.

Ответить
Развернуть ветку
Артём Лисовский
Вы фантазируете

втыкаю вам палки в колеса. тут вопрос цели, если мне клиент поставит цель не дать вам получать информацию, вы её не получите, вопрос цены

Вы пока ни одного способа, который бы меня заставил отказаться от заказа не показали.

я понимаю, что вы и проксей купите и решений рекапч. но согласитесь, вы сдадитесь быстрее, чем я. потому что при защите возможно вставить палки не только в выдачу(регулярки поправите, отображу картинкой), но и в сам процесс(следим за вашей инфой и действиями, втыкаем капчи по условиям, ...), а также их комбинирование - менять верстку программно ситуативно случайно. я видел решения когда случайно генерили шрифты и меняли буквы так, чтобы "c)qri0" писалось юзеру как "привет". если вам на каждый запрос будет отдаваться новый случайно сгенерированный шрифт, то у вас кроме OCR не останется вариантов.

придумывать и генерить средства защиты проще, чем их отгадывать, увы. посмотрите на изощренность тех же капч.

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

Ответить
Развернуть ветку
Александр Ерёмин

Тут скорее наоборот. Быстрее сдастся бизнес, а не тот кто парсит.

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

Менять верстку программно? Этого будет недостаточно, придется менять и структуру страницы. Получите постоянные баги, и следовательно увеличенные затраты на поддержку и регресс вашего функционала.
Бизнес на подобную хрень потратит больше денег, чем тот кто парсит.

Ответить
Развернуть ветку
John Lock
 Получите постоянные баги, и следовательно увеличенные затраты на поддержку

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

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

Ответить
Развернуть ветку
John Lock
 разгадка капчи, например

Тут не согласен, разгадка капч стоит очень дешево, пол бакса за 1000 разгаданных капч.

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

Это конечно дороже чем прогрузка сайта на серваке, и инстанс такого пользователя нельзя палить массовым парсингом множества ресурсов и такой инстанс скорее всего будет заточен именно под ваш ресурс, но все возможно. Это все всегда вопрос цены🤷‍♀️

Ответить
Развернуть ветку
Артём Лисовский

рекапча подороже. машинки под эмуляцию недорого найдутся, окей. чистые ip/прокси ещё в копеечку встанут

Ответить
Развернуть ветку
KilledDebtor

Это просто смешно 2-4 бакса за тысячу капч )

Ответить
Развернуть ветку
KilledDebtor

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

"c)qri0" писалось юзеру как "привет"

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

Ответить
Развернуть ветку
138 комментариев
Раскрывать всегда