По одному из определений парсинг есть синтаксический анализ информации. Человеку, не вовлечённому в конкретные задачи сбора и обработки информации для Интернет-проектов, это не говорит ни о чём. Да и само определение лишь в общих чертах обозначает огромный объём работы, которую ежеминутно совершают сотни миллионов людей и десятки миллионов роботов (хоть и виртуальных, но от этого ничуть не менее настоящих) по всему миру. А ведь эта задачка обычное для человека дело — что в сравнении цен на билеты онлайн, что в выборе подходящей электроники на сайтах магазинов… Следя за ценами и акциями в удобном мобильном приложении ближайшего к дому гипермаркета, никто из нас и не подумает окрестить себя парсером.
Тем не менее, бизнес-парсинг существует, работает и, само собой, является предметом оживлённой дискуссии на многих уровнях рассмотрения: этическом, юридическом, технологическом, финансовом и не только.
Эта статья не высказывает определённого мнения, не даёт советов и не раскрывает тайн — здесь мы лишь рассмотрим некоторые мнения на примере самых интересных комментариев к одной отдельно взятой статье про парсинг (50к просмотров и более 400 комментариев!) на Хабре, трактуя их с позиции своего опыта в задачах парсинга веб-проектов. Иными словами — мы потратили много времени и постарались свести и классифицировать воедино самые интересные комментарии читателей… житейская мудрость, так сказать :)
Итак, про парсинг:
«Дело техники». Фантастические прокси и где они обитают.
Как естественна сама идея парсинга (всегда интересно поглядеть, что там у «соседей» происходит), так же просты и базовые способы его реализации. Если хочешь узнать — спроси, но, если хочется знать актуальные значения большого массива данных (будь то цены на товары, их описания, доступные для заказа объёмы или горячие скидки), то «спрашивать» придется много и часто. Понятно, что никому и в голову не придет пытаться собирать эти данные вручную (разве что большой бригаде трудолюбивых ребят из южных стран, вдохновленных не самым гуманным способом), поэтому в ход идут простые действенные решения в лоб: «сваять» сайт, настроить браузер, собрать ботов — и «простукиваем» целевой сайт на предмет интересующих показателей, ответы тщательно записываем в «блокнот» удобного формата, собранные данные анализируем, повторяем.
Вот некоторые подходы к «технике парсинга» от наших читателей и от нас:
- «Ферма Selenium — и вперёд!» (Имеются в виду headless-браузеры с BeautifulSoup-подобным, как у Selenium/Splinter, решением). Как говорит наш читатель, он написал маленький сайт на кластере docker swarm жене для мониторинга сайтов продавцов (она импортер), чтобы те не нарушали политику по ррц/мрц (рекомендуемые розничные цены). По отзывам автора, всё работает стабильно, экономика парсинга сходится — «все затраты это 4 ноды по 3$». Правда, товаров у гордого автора всего около тысячи и сайтов в парсинге десяток, не больше :)
- «Запускаем Хромиум и все ОК, получается 1 товар в 4-5 секунд можно брать...». Ясное дело, что ни один админ не обрадуется подскочившей нагрузке на сервер. Сайт, конечно, для того и нужен, чтобы предоставлять информацию всем интересующимся, но «вас много, а я один», поэтому особо рьяно интересующихся, само собой, игнорируют. Что ж, не беда: на помощь приходит Chromium — если браузер стучится на сайт в режиме «нам только спросить» — ему можно и без очереди. Ведь в общем массиве задач парсинга в 90% случаев делается парсинг html-страниц, а в «особо тяжких случаях» (когда сайты активно защищаются, как тот же Яндекс.Маркет, просящий капчу) справляется именно Chromium.
- «Чистые прокси своими руками из LTE-роутеров/модемов». Есть вполне рабочие способы настроить чистые прокси, годные для парсинга поисковых систем: ферма 3G/4G-модемов либо покупка прокси «белых» вместо набора случайных «грязных» прокси-серверов. Тут важно, какой язык программирования используется для такого промышленного парсинга — 300 сайтов в день (и правильный ответ — .Net! :). На самом деле, в Интернете полно сайтов с открытыми списками прокси, 50% из которых вполне рабочие и с этих сайтов не так уж сложно парсить списки прокси, чтобы потом с их помощью парсить другие сайты :)… Ну мы так делаем.
- Ещё один кейс в пользу Selenium: «Сам занимаюсь парсингом (но не в рунете, а ловлю заказы на любимом всеми upwork.com, там это обычно зовётся scraping, более подходящий термин, имхо). У меня немного другое соотношение, где-то 75 к 25. Но в целом да, если лень или сложно — то уж от selenium пока никто не уворачивался :) Но из нескольких сотен сайтов, с которыми приходилось работать, ни разу не доходило до распознавания картинок, чтоб получить целевые данных. Обычно, если данных нет в html, от они всегда подтягиваются в каком-нибудь json (ну, собственно, ниже уже показали пример).
- «Укротители Python-ов». И ещё кейс читателя: «На прошлой работе использовал Python/Scrapy/Splash для 180+ сайтов в день разного размера от prisma.fi и verkkokauppa.com до какой-то мелочи с 3-5 продуктами. В конце прошлого года арендовали у Hetzner вот такой сервер (https://www.hetzner.com/dedicated-rootserver/ax60-ssd) с Ubuntu Server на борту. Большая часть вычислительных ресурсов пока что простаивает.
- «WebDriver — наше всё». Занимаясь в целом автоматизацией (куда уже и парсинг попадает), настолько достоверной, на сколько это возможно (задачи QA). Хорошая рабочая станция, десяток-другой браузеров параллельно — на выходе очень злая-быстрая молотилка.
«Джентльменский набор» парсящего — 4 виртуалки, безлимитный трафик, 4 процессора на каждой, 8 гб памяти, Windows Server… Пока хватает, на каждую новую партию из условно 50 сайтов — нужна своя виртуалка. Но сильно зависит от самих сайтов. Ещё в Visual Studio есть System.Net, который фактически использует установленный в Windows Internet Explorer. Тоже работает.
«Как защититься (от парсинга) по уму? Да никак, всё равно пролезем»
Идеи для бизнеса на парсинге, говоря про наш бизнес, нам подкидывают постоянно.
- Выдачу Яндекса парсить, как это делают множество SEO-сервисов. «На это спроса побольше, больше денег. Правда, они, в основном, продают целую систему аналитики SEO.» Но мы не парсим выдачу — не просили, да и там через запросов 100 сразу будет капча, нужны чистые прокси, а их сложно достать или дорогие, не так и выгодно… Само собой, больших игроков провести далеко не так просто, и читатели с нами этим делятся (мы сами НЕ парсим ГУГЛ и Яндекс). По опыту, у Яндекса, Гугла и подобных крупных корпораций существует некоторая база с подсетями датацентров (базы прокси у них ведь, обновляются, и крупные игроки на них подписаны и банят). Таким образом, поднятая сеть прокси на ip-адресах, выданных датацентрам, на отлично улетает в бан с выдачей капчи и другими причудами. По итогу остаются только незаконные варианты с закупом прокси у владельцев ботнетов и подобная «грязь», в этом случае у тебя будет реальный пользовательский ip. И даже при этом таким корпорациям очень нужно, чтобы у тебя были «отстоявшиеся» куки, с которыми ты уже «поползал» какое-то время по сайтам, где они могут тебя трекать (к примеру, счётчики посещений). Но как они вообще отличают парсеров от NAT-ов в спальных районах? Условные 100 запросов это ведь всего ничего.
- Защита от парсинга: убрав из рассмотрения «великих и ужасных», сосредоточимся на нас, «простых смертных». Если есть те, кто занимается парсингом, обязательно должны быть и те, кто будет стараться им в этом помешать. Играть интереснее с живыми людьми: появляется элемент соперничества, каждая сторона старается перехитрить другую. И, так как собирать информацию вручную никто по-прежнему не намерен, играют они в то, кто сделает бота наиболее похожего на живого человека, и кто сможет эффективнее этих ботов распознавать, продолжая при этом отвечать на запросы реальных пользователей — сайт же призван бизнесу помогать, отталкиваемся мы от этого. И, оставаясь в рамках задачи о бизнес-эффективности, нельзя не учитывать разумное распределение ресурсов и рентабельность мероприятий по, собственно, парсингу и противодействии ему:
- Защититься от парсинга нельзя (кроме как от «студентов»), но можно повысить порог затрат на него (и временных и денежных). В итоге, те данные, которые мы защищаем (несколько разделов сайта), проще не парсить, а пойти и купить готовую БД, также как покупаем ее мы. В сети валяются таблицы ip адресов парсеров, показывать этому списку капчу при входе — не проблема. Аналогично и генерить id и классы, как делает тот же mail.ru — тоже не проблема и не требует каких-то больших затрат. Новая капча от гугла вообще очень точно определяет, робот или нет. Если есть подозрения, выпилить пользователя и попросить ввести капчу — просто. В конце концов, приманку-HoneyPot для отлова бота никто не отменял. Ну и классика, заменять буквы в тексте, делать маски и тд.
- И тут мы возразим сами себе: возможно, по отдельности это всё не поможет, но все вместе осложнит вам жизнь настолько, что станет нецелесообразным. При этом все эти техники вообще не требуют больших затрат. Правда, все эти техники прекрасно обходятся, так что по сути — защиты нет. Динамические прокси, сервисы распознающие капчи индусами, и selenium с хорошо прописанным алгоритмом действий. Всё, чего можно добиться — разработка парсера будет стоить подороже, возможно кого-то это и отпугнет, но если целевой сайт — это не каталог на полторы страницы местного офиса «Рога и Копыта», то повышение затрат мало кого отпугивает.
- При защите всегда речь про использование типовых поведенческих моделей реальных посетителей, плюс систем, адекватно идентифицирующей «белых» ботов (яндекс, гугл и тп). А чтобы подстроиться под реального посетителя, нужно знать набор типовых карт переходов. И тогда простым пулом прокси при парсинге тут не обойдешься. Система не на 100% защищает, но поставленную задачу решает — по статистике просмотра можно понять, когда весь сайт отсканили. Так делают либо парсеры, либо поисковые системы. Но поисковые системы реагируют на robots.txt, а парсеры нет.
«Ой вей. Если бы все люди всё делали по уму… Я, думаю, безработных было бы в 10 раз больше. На ваш век хватит.»
«Экологично ли я живу? Да, но зря»
- В морально-этической плоскости рассмотрения вопроса лежит немаловажный момент, относящийся и к технической, и к правовой стороне парсинга. Лаконичен в своей простоте и символичен в названии файл robots.txt, который наши читатели и мы трактуем по-разному:
- Ваша деятельность как «водителя» бота «этична» ровно настолько, насколько Ваш бот соблюдает robots.txt посещаемого сайта. Не исходя из допущений вида «страницы товара не закрывают», а буквально накладывая маски allow и disallow на запрашиваемые URL. Отсутствует robots.txt — трактуйте в Вашу пользу; присутствует, но вы его нарушаете — однозначно, Вы злонамеренно используете сайт. Конечно robots.txt не имеет силы закона, но если действительно «припечет», не факт что точно пройдет мимо юристов.»
- Несмотря на то, что с роботами договориться невозможно, иной раз это легче, чем с людьми, ведь в магазинах вешают таблички «фото запрещено», и это незаконно. И неэтично. «Просто традиция такая. robots.txt — это технический приём. Он не про этику. Если вы хотите обозначить, что не желаете парсинга — делаете раздел, вроде такого: account.habr.com/info/agreement. Не знаю будет ли такое ограничение законным, но, как минимум, свои пожелания можете там изложить человеческим языком (или упомянуть robots.txt), потом можно про этику.» Наши юристы парируют: «Никоим образом такое ограничение не будет законным.»
- Думаем синхронно про парсинг и про дальнейшее использование информации. «Robots.txt — это не столько про парсинг, сколько про дальнейшую публикацию (например, в поисковой выдаче). Если вы хотите, чтобы данные не были кем-либо получены, то вам следует ограничивать круг лиц, которые смогут их увидеть. Если у вас не занавешены шторы на окнах, то не стоит ходить голым. Может быть специально смотреть в окна и некрасиво, но без занавесок какие претензии?»
- Этичность парсинга — нейтральна. Неэтичным может быть способ использования полученной информацией. В целом, чисто с точки зрения этики, каждый человек имеет право получить публичную информацию, которая не носит частный или специальный характер и не охраняется законом. Цены точно являются публичной информацией. Описания — тоже. Описания могут быть объектом авторского права и тогда их нельзя размещать без разрешения. Но никакая этика не нарушается, даже если я буду парсить сайты и делать свой публичный сайт, на котором будет отражаться динамика цен и сравнение конкурентов. Это даже этично, так как предоставляет общественно-полезную информацию.»
- «Руками собирать можно, а парсить роботом нельзя.» Любое «зло» при должном старании и умении может быть оправдано, а парсинг и подавно — тем более, что есть живые примеры того, как им пользовались во всех смыслах правильно, цитируем нашего читателя: «Я занимался давным-давно парсингом, но всегда просили делать вполне легально и морально правильный парсинг. Несколько раз посредники просили сделать парсинг оптовика (для продажи его же товаров), сам оптовик был не против, но вкладываться в разработку API совершенно не собирался (или не мог по тех.причинам); один раз посредник одного китайского магазина просил сделать интеграцию, но там api китайского магазина был настолько долбанутый и ограниченный, что частично приходилось получать инфу парсингом; один раз автор и владелец сайта и форума хотел мигрировать с бесплатного сайта, который «зажимал» базу данных; также делал интеграцию сайта литературного конкурса и его же форума, чтобы при добавлении нового рассказа автоматически появлялась тема на форуме (по тех.причинам это невозможно было сделать иначе).»
«Юриста вызывали? Цитировать нельзя парсить»
Вне зависимости от того, чью сторону вы выбираете в вопросе определения источника силы: деньги или правда — ясно одно, что, там где начинают водиться деньги, найти правду становится всё сложнее. Вынося дискуссию о возможности приобретения за «ден.знаки» всего и вся, включая сам закон и его представителей, за рамки этой статьи, рассмотрим некоторые правовые аспекты, поднятые в комментариях:
- «От подглядывания до воровства — один шаг». Даже если разрешено всё, что не запрещено, то, считают наши читатели, «подглядывать в замочную скважину как минимум некрасиво, а если клиент потом ещё и выдаёт спарсенное за свое — то это уже прямое воровство. Конечно, понятно, что в бизнесе все так делают. Но в приличном обществе всё же принято об этом молчать.» Однако, парсить для кого-то и выдавать спарсенное за своё, как говорится, две большие разницы: «Вы путаете мягкое и холодное. Мы действительно оказываем услугу по парсингу. Но ровно так же можно обвинять производителей, например, оружия в том, что с его помощью убивают. Мы делаем бизнес, а в бизнесе есть одно правило — законно это или нет. Моя точка зрения… Если к нам приходят клиенты и готовы платить много, чтобы получить данные — это разве плохо…»
- «Сделал приложение для сайта СМИ — прибили за жалобу». Сайт Forbes, парсинг, приложение на Google Play — что могло пойти не так? «В свое время решил сделать приложение для сайта Forbes. Чтобы получать статьи с сайта — сделал парсинг страниц. Настроил всё в автоматическом режиме и сделал приложение для Андроид. Выложил приложение в маркет. Через год со мной связался юрист и потребовал удалить приложение, потому что я нарушаю авторские права. Спорить не стал. Обидно, что у самого Forbes нет приложения по их же статьям с сайта. Есть только сайт. А сайт у них тормозной, долго грузится и увешан рекламой...»
- «Моя база данных — мое произведение под защитой!». Авторское право — ещё одно понятие, которому можно посвятить с десяток страниц обсуждений (помимо сотен тысяч уже существующих), однако не упомянуть его никак тоже неправильно. Наш читатель выдал концепцию: «Некто создал базу товаров. Потратил кучу ресурсов на поиск информации, систематизацию этой информации, вынесение данных в базу. Вы по просьбе конкурента эту базу спарсиваете и за деньги отдаете тому самому конкуренту. Вы считаете, что здесь нет этических проблем? Касательно законности — не знаю, как в РФ, но в Украине БД может быть объектом авторского права.»
Однако, ответственность за пользование услугой или товаром всё ещё лежит на том, кто её/его приобретает и с какой целью использует: «… и в России тоже. Мы оказываем услугу по сбору данных. И за эту услугу просим деньги. Мы не продаем сами данные. Я, к слову, всех клиентов предупреждаю, что они могут нарушить закон если будут использовать, например, описания.»
- «Формально вы правы, но статью на вас нашел!» В УК РФ (статья 146) описываются только масштабы нарушений, которые позволяют классифицировать нарушение авторских прав как «уголовку». Сами по себе права описаны в ГК — а на масштабы, позволяющие классифицировать деяние как «уголовку», регулярный парсинг, такой, что возникает вопрос «а не ляжет ли сайт», без проблем вытягиваются. Но важны аспекты:
- Там «крупный размер» — это не в количестве спарсенных страниц, а в деньгах. Как вы вообще оцените парсинг (и его регулярность), как нарушение авторских прав (!), в деньгах? А как обычно в таких случаях делают и откуда может штраф в сотни тысяч долларов за одну копию фильма взяться? Высчитывается «упущенная прибыль» с соответствующим коэффициентом. Можно с каких-нибудь договоров просчитать — сколько будет стоит купить у вас ту же информацию легально и отсюда «плясать». Но, для начала, вы должны её изначально продавать (а не выкладывать в публичный доступ), выдумывать цифру задним числом не «прокатит». Хотя и тут риски есть: знаете, сколько стоит коммерческая лицензия на условный Консультант-Плюс? Как только Вы полезете дальше десятка основных законов, вы быстро наткнетесь на предложение купить ту самую коммерческую версию.
- Наша история точно не из уголовного дела (и Вы не путайте штраф и ущерб. Вот вы по хулиганке разбили бутылку пива: ущерб — 30 рублей, штраф — до 1000р, а по гражданскому иску потом хоть триллион отсуживайте за «упущенную выгоду», но это уже не штраф). Вы же прайс не продаете вообще, что эксперт то сочинять будет? Конкретно, а не «хороший юрист натянет без проблем».
Резюмируя: «— Каким образом парсинг стал равен нарушению авторских прав? — Никоим. Нарушение — это заказать у нас парсинг, а потом вывалить контент на свой сайт. «Положить» сайт — это другая статья.»
Максим Кульгин, xmldatafeed.com
Автор: makasin4ik