Правда про парсинг сайтов, или «все интернет-магазины делают это»
В этой статье я постараюсь наиболее просто рассказать о парсинге сайтов и его основных нюансах. Моя компания занимается парсингом сайтов уже более трёх лет и ежедневно мы парсим около 300 сайтов. Я обычно открыто пишу об этом в соц.сетях (плюс мы много чего из итогов парсинга крупнейших магазинов России выкладываем бесплатно — публично), что вызывает бурные обсуждения и неодобрение со стороны пользователей. Забавно после прочтения комментариев заглядывать к себе в личку и читать сообщения с предложениями о сотрудничестве от тех же людей, кто только что осуждал нас в комментариях под постом :) Вся статья будет в формате наиболее часто задаваемых вопросов и честных ответов (материал маркетинговый, не технический).
1. Что такое парсинг?
По определению парсинг – это автоматизированный сбор неструктурированной информации, ее преобразование и выдача в структурированном виде. Довольно безобидно, не правда ли? Однако, общество относится к этому довольно своеобразно, как к подростковой мастурбации – многие этим занимались :), но никто об этом не говорит публично. Более того, парсинг часто осуждается и считается чем-то слегка постыдным. Причина как и в большинстве подобных случаев, в неправильном восприятии.
Раскрою вам тайну: парсингом занимаются все… По крайней мере, все крупные игроки на рынке. Пару лет назад в одной из статей в Ведомостях представители “М-видео”, “Связного” и “Ситилинка” даже в открытую говорили об этом в ответ на интерес ФАС (см. тут).
2. Для чего парсинг нужен?
В первую очередь, целью парсинга является ценовая «разведка», ассортиментный анализ, отслеживание товарных акций. “Кто, что, за сколько и в каких количествах продаёт?” – основные вопросы, на которые парсинг должен ответить. Если говорить более подробно, то парсинг ассортимента конкурентов или того же Яндекс.Маркет отвечает на первые три вопроса.
С оборотом товара несколько сложней. Однако, такие компании как “Wildberries”, “Lamoda“ и Леруа Мерлен, открыто предоставляют информацию об ежедневных объемах продаж (заказах) или остатках товара, на основе которой не сложно составить общее представлении о продажах (часто слышу мнение, мол эти данные могут искажаться намеренно — возможно, а возможно и нет). Смотрим, сколько было товара на складе сегодня, завтра, послезавтра и так в течении месяца и вот уже готов график и динамика изменения количества по позиции составлена (оборачиваемость товара фактически). Чем выше динамика, тем больше оборот.
Потенциально возможный способ узнать оборачиваемость товаров с помощью ежедневного анализа остатков сайта Леруа Мерлен.
Можно, конечно, сослаться на перемещение товаров между точками. Но суммарно, если брать, например, Москву — то число не сильно изменится, а в существенные передвижения товара по регионам верится с трудом.
С объемами продаж ситуация аналогична. Есть, конечно, компании, которые публикуют информацию в виде много/мало, но даже с этим можно работать, и самые продаваемые позиции легко отслеживаются. Особенно, если отсечь дешёвые позиции и сфокусироваться исключительно на тех, что представляют наибольшую ценность. По крайней мере, мы такой анализ делали – интересно получалось.
Во-вторых, парсинг используется для получения контента. Здесь уже могут иметь место истории в стиле “правовых оттенков серого”. Многие зацикливаются на том, что парсинг – это именно воровство контента, хотя это совершенно не так. Парсинг – это всего лишь автоматизированный сбор информации, не более того. Например, парсинг фотографий, особенно с “водяными знаками” – это чистой воды воровство контента и нарушение авторских прав. Потому таким обычно не занимаются (мы в своей работе ограничиваемся сбором ссылок на изображения, не более того… ну иногда просят посчитать количество фотографий, отследить наличие видео на товар и дать ссылку и т.п.).
Касательно сбора контента, интересней ситуация с описаниями товаров. Недавно нам поступил заказ на сбор данных по 50 сайтам крупных онлайн-аптек. Помимо информации об ассортименте и цене, нас попросили “спарсить” описание лекарственных аппаратов – то самое, что вложено в каждую пачку и является т.н. фактической информацией, т.е. маловероятно попадает под закон о защите авторских прав. В результате вместо набора инструкций вручную, заказчикам останется лишь внести небольшие корректировки в шаблоны инструкций, и всё – контент для сайта готов. Но да, могут быть и авторские описания лекарств, которые заверены у нотариуса и сделаны специально как своего рода ловушки для воришек контента :).
Рассмотрим также сбор описания книг, например, с ОЗОН.РУ или Лабиринт.ру. Здесь уже ситуация не так однозначна с правовой точки зрения. С одной стороны, использование такого описания может нарушать авторское право, особенно если описание каждой карточки с товаром было нотариально заверено (в чём я сильно сомневаюсь — ведь может и не быть заверено, исключение — небольшие ресурсы, которые хотят затаскать по судам воров контента). В любом случае, в данной ситуации придётся сильно «попотеть», чтобы доказать уникальность этого описания. Некоторые клиенты идут еще дальше — подключают синонимайзеры, которые «на лету» меняют (хорошо или плохо) слова в описании, сохраняя общий смысл.
Ещё одно из применений парсинга довольно оригинально – “самопарсинг”. Здесь преследуется несколько целей. Для начала – это отслеживание того, что происходит с наполнением сайта: где битые ссылки, где описания не хватает, дублирование товаров, отсутствие иллюстраций и т.д. Полчаса работы парсера — и вот у тебя готовая таблица со всеми категориями и данными. Удобно! “Самопарсинг” можно использовать и для того, чтобы сравнить остатки на сайте со своими складскими остатками (есть и такие заказчики, отслеживают сбои выгрузок на сайт). Ещё одно применение “самопарсинга”, с которым мы столкнулись в работе — это структурирование данных с сайта для выгрузки их на Яндекс Маркет. Ребятам так проще было сделать, чем вручную этим заниматься.
Также парсятся объявления, например, на ЦИАН-е, Авито и т.д. Цели тут могут быть как перепродажи баз риелторам или туроператорам, так и откровенный телефонный спам, ретаргетинг и т.п. В случае с Авито это особенно явно, т.к. сразу составляется таблица с телефонами пользователей (несмотря на то, что Авито подменяет телефоны пользователей для защиты и публикует их в виде изображения, от поступающих звонков все равно никуда не уйти).
3. “Что в резюме тебе моем?” или парсинг HH.RU
В последнее время стали актуальны запросы на парсинг Headhunter-а. Правда сначала люди просят продать им “базу Хедхантера”. Но, когда уже понимают, что никакой базы у нас нет и быть не может, мы переходим к разговору о парсинге в их профиле (“под паролем”). Это своеобразное направление парсинга и, честно говоря, нам оно не особо интересно, однако рассказать о нём стоит.
В чём тонкость? Клиент предоставляет доступ к своему аккаунту и ставит задачу по сбору данных под свои нужды. Т.е. он уже оплатил доступ к базе HH и, подписывая с нами договор, ставит нам задачу на автоматический сбор информации в его интересах и под его аккаунтом, что находится полностью под его ответственностью. В случае, если HH зафиксирует ненормальную активность, аккаунт будет заблокирован. Потому мы стараемся как можно лучше сымитировать человеческую деятельность при сборе данных.
Если бы HH (насколько знаю “успешно” проваливший свои эксперименты с API) сам предоставлял (продавал) данные в табличке по регионам, скажем, контакты всех работающих в данный момент директоров по маркетингу в Москве, к нам бы никто и не приходил. А пока это приходится делать человеку “ручками”, к нам идут. Ведь, когда у тебя есть такая таблица, заниматься рекламным спамом – холодными звонками намного удобнее.
Подчеркну ещё раз, у нас нет базы HH, мы просто собираем данные для каждого клиента под его нужды, его аккаунтом и его ответственностью. И нарушение договора оферты не связано с использованием сайта парсящей стороной. Подписывая с нами договор, клиент получает за прогон контакты порядка 450-ти ЛПР-ов, которые мы положим к нему на сервер, и дальше уже его отдел продаж сам решит, что с этим делать. Эх, мы бы тоже “спамили”, если б у нас была такая база. Шучу :)
Хотя, лично я считаю, что нет перспектив в парсинге под паролем. А вот парсинг открытых ресурсов – это другое дело. Ты один раз настроил всё и парсишь постоянно, потом перепродаешь доступ ко всем собранным данным. Это более перспективно.
4. Парсинг вообще законен?
В российском законодательстве нет статьи, запрещающей парсинг. Запрещен взлом, DDOS, воровство авторского контента, а парсинг – это ни то, ни другое, не третье и, соответственно, он не запрещен.
Некоторые люди воспринимают парсинг как DDOS-атаку и относятся к нему с сомнением. Однако, это совершенно разные вещи, и при парсинге мы, напротив, стараемся как можно меньше нагружать целевой сайт и не навредить бизнесу. Как в случае со здоровым паразитизмом – мы не хотим, чтобы бизнес «отбросил копыта», иначе нам не на чем будет “паразитировать”.
Обычно просят парсить крупные сайты, из топа 300-500 сайтов России. На таких сайтах посещаемость, как правило, несколько миллионов в месяц, может даже и больше. И на таком фоне парсинг одного товара в секунду или в две практически незаметен (нет смысла чаще парсить, 1-2 секунды на товар — это оптимальная скорость для крупных сайтов). Соответственно, и намека на DDOS-атаку в наших действиях нет. Очень редко люди просят чтобы мы обновляли, например, весь сайт БЕРУ.РУ за сутки — это, скажем прямо, перебор и слишком высокая нагрузка на сайт… обычно занимает 3-4 дня.
Напомню, что парсинг – это лишь сбор того, что мы можем своими глазами увидеть на сайте и скопировать к себе руками. Таким образом, под статью об авторском праве могут попасть лишь действия с уже собранной информацией, т.е. действия самого заказчика. Просто человек это делает долго медленно и с ошибками, а парсер – быстро и не ошибается. Что же делать, когда речь касается сбора данных с AliExpress или Wildberies? Человеку просто не под силу такая задача, и парсинг – единственный выход.
Правда, недавно попросили парсить сайт государственной организации – суда, если не ошибаюсь. Там в открытом доступе вся информация, но мы (на всякий случай) отказались. :)
5. “Вы чего нас парсите, мы же заказчик” или в чем разница между парсингом и мониторингом цен?
Мониторинг цен – одно из наиболее востребованных направлений применения парсинга. Но с ним не всё так просто – поработать в данном случае придётся не только нам, но и самому клиенту.
При заказе на мониторинг цен мы сразу предупреждаем, что будем парсить не только конкурентов, но и заказчика. Это необходимо для получения схожих таблиц с товарами и ценами, которые мы сможем обновлять автоматически. Однако, сами по себе такие данные не несут ценность, пока они не связаны между собой (так называемый матчинг товаров). Некоторые позиции с разных сайтов мы можем сопоставить автоматически, но, к сожалению, на данный момент “машины” еще не так хороши, чтобы сделать это гарантированно без ошибок, и лучше человека (например, работающего удаленно на полставки сотрудника из регионов) это никто не сделает.
Если бы все выводили штрих-код на сайте, то вообще было бы замечательно, и мы могли бы делать все “связки” автоматически. Но, к сожалению, так это не так, и даже названия продуктов разные компании пишут по-разному.
Хорошо, что такую работу необходимо провести единожды, а потом периодически перепроверять и вносить небольшие корректировки, если требуется. При наличии связок мы уже можем обновлять такие таблицы автоматически. К тому же, обычно людям не требуется мониторить цены на всё: есть условно 3-5 тысяч позиций, которые в топе, а мелочь не представляет интерес. И оператор из региона легко сможет выполнять такую работу за деньги порядка 10 000 рублей в месяц.
Самый удачный и правильный кейс в данном случае, на мой взгляд, загружать полученный прайс лист конкурентов сразу к себе в 1С-ку (или другую ERP систему) и там уже выполнять сопоставление. Так мониторинг цен легче всего внедрить в ежедневную деятельность своих аналитиков. А без анализа такой парсинг никому и не нужен.
6. Как защититься от парсинга?
Да никак. И стоит ли вообще защищаться от парсинга? Я бы не стал. Работающей 100% защиты всё равно нет (точнее, мы еще не встречали), так что особого смысла пытаться защититься я не вижу. Лучшая защита от парсинга – это просто выложить готовую таблицу на сайте и написать – берите отсюда, обновляем раз в пару дней. Если люди так будут делать, то у нас хлеба не будет.
К слову говоря, недавно созванивались с IT директором крупной сети – они хотели протестировать свою защиту от парсинга. Я его напрямую спросил, почему они так не делают. Как технический специалист он прекрасно понимает, что никакая защита от парсинга не спасёт, лишь отпугнет дилетантов; а вот компании, которые зарабатывают на парсинге, вполне могут позволить себе исследовательскую деятельность в этом направлении – долго и мучительно разбираться в новой защите, и в итоге ее обойти…
Как правило, все используют однотипные защиты, и такое исследование пригодится еще не раз. Так вот, оказалось, что отдел маркетинга не готов к такому: “Зачем нам упрощать жизнь конкурентам?” Казалось бы, логично, но… В результате компания будет тратить деньги на защиту, которая не поможет, а паразитная нагрузка на сайт – останется. Хотя, справедливости ради, стоит отметить, что от «студентов» изучающих python и парсящих все что «шевелится» вполне может помочь.
Кстати, и “Яндекс”, и “Google” занимаются парсингом: они заходят на сайт и индексируют его – собирают информацию. Только все хотят, чтобы “Яндекс” и “Google” индексировали их сайты по понятным причинам, и никто не хочет, чтобы их парсили :)
7. “Я тут бесплатно поискал...” или история про авиабилеты
Однажды к нам обратились с интересным заказом на тестовый парсинг. Компания занимается авиабилетами и им были интересны цены конкурентов на пару самых популярных направлений. Задача оказалась нетривиальной, т.к. пришлось повозиться с подстановкой и сопоставлением рейсов. Занимательным оказалось то, что цены у “Onetwotrip”, “Aviasales” и “Skyscanner” на одни и те же рейсы немного отличаются (разброс около 5-7%).
Проект показался мне очень интересным, и я выложил пост об этом в соц.сетях. К моему удивлению дискуссия под постом оказалась довольно агрессивной, и я не сразу понял почему. Затем мне написал гендиректор одной из компаний лидера рынка продажи билетов в России, и ситуация прояснилась. Выяснилось, что запросы о ценах на билеты для таких компаний платные, т.к. они берут информацию с международных платных сервисов. И, помимо паразитной нагрузки, парсинг представляет для них еще и финансовую.
В любом случае, никто же с вас не требует оплаты, если вы подыскиваете себе лично билеты на этих сервисах, а запросов обычные люди тоже делают немало пока перебирают разные варианты… В общем тут такая бизнес-дилемма :)
8. “Рецепты шеф-парсера”. или как мы работаем?
Думаю, для большего понимания всех аспектов парсинга стоит приоткрыть завесу нашей “внутренней кухни”.
Всё начинается с заказа. Иногда клиенты связываются с нами сами, а иногда звоним мы. Особенно удачно получается с заказами на мониторинг цен. В этом случае нам приходится парсить не только конкурентов, но и самого заказчика. Поэтому мы порой звоним тем, кого так или иначе парсим, и в открытую об этом говорим, предлагая свои услуги – работа ведь нами уже и так выполняется. Сначала реакция очень негативная, но проходит пара дней, эмоции спадают, и заказчики сами перезванивают, говоря: “Чёрт с ним! Кого вы ещё парсите?”
Парсинг у ОЧЕНЬ многих владельцев посещаемых ресурсов вызывает эмоции. Сначала негативные, ведь он схож с подглядыванием в замочную скважину. Затем перерастает в интерес, а потом и в осознание необходимости. Бизнесмены – умные люди. Когда эмоции сходят на нет и остаётся холодный расчёт, всегда возникает вопрос: “А, может, мы где-то недоработали, и нам тоже это нужно?”
Благодаря этим эмоциям мы довольно активно растём и развиваемся. На данный момент мы парсим порядка 300 сайтов в день. Обычно у нас заказывают по 8-15 сайтов, а парсинг одного стоит от 5 до 9 тысяч рублей в месяц, в зависимости от сложности подключения, ведь каждый сайт приходится подключать индивидуально (уходит где-то 4-5 часов на ресурс). Сложность заключается в том, что некоторые защищаются. Борьба идёт не столько с парсингом, сколько с некой паразитной нагрузкой, которая не приносит им прибыль, но иногда приходится повозиться.
В любом случае ВСЁ ПАРСИТСЯ, даже если цена на товар публикуется на сайте как картинка :) Желающим попробовать свои силы в парсинге, рекомендую потренироваться на сайте «Аптеки Столички» и спарсить цены.
Интернет- магазин сети аптек «Столички» — цены пишутся внутренним шрифтом и чтобы их спарсить одним из решений будет формирование картинки и ее распознавание. Мы так делаем по крайне мере.
Собранные данные передаются клиенту. Обычно мы размещаем их на собственном облаке, постоянно обновляя, и предоставляем клиенту доступ к ним по API. Если с данными вдруг становится что-то не так (а это бывает редко – раз в 3-4 месяца), нам сразу звонят-пишут, и мы стараемся устранить проблему как можно быстрее. Такие сбои возникают при установки новой защиты или блокировки, а решаются с помощью исследований и прокси соответственно. В другом случае, когда на сайте что-то меняется, бот просто перестает понимать, где что находится, и нашему программисту приходится заново его настраивать. Но всё решаемо, и заказчики обычно относятся к таким проблемам с пониманием.
Отмечу, что в нашем деле личность заказчика никогда не разглашается – мы относимся к этому достаточно трепетно, да и пункты в договоре о неразглашении никто не отменял. Хоть в парсинге и нет ничего предосудительного, но многие стесняются.
Собственно, подводя итог- если вы растущий бизнес, торгуете широко распространенными товарами или работаете в быстро меняющейся среде (такой, как найм персонала или предложение специфических услуг для определенной категории авторов объявлений, резюме и содержимого других“досок объявлений” в Интернете), то рано или поздно столкнетесь с парсингом (как заказчик или как мишень).
P.S.: если статья понравится, будем писать уже про тех.сторону дела — как обходим защиту, какие мощности используем, на чем написано (спойлер .net) и т.п.
Максим Кульгин, xmldatafeed.com