Меня зовут Максим Кульгин, моя компания xmldatafeed занимается парсингом сайтов в России порядка четырёх лет. По итогам прошедшего 2022 года поделюсь советами для тех, кто думает о подобном бизнесе. Бизнес очень интересный, но наполнен нюансами, которые и расскажу в статье.
Я ранее рассказывал про наш опыт развития бизнеса на парсинге сайтов в двух статьях (часть 1 и часть 2). Теперь хочу подвести итоги 2022 года и дать некоторые советы командам, которые хотят составить нам конкуренцию (не вижу, кстати, в этом ничего страшного, т. к. рынок довольно большой и скорее всего у вас будет свой путь, отличный от нашего). Никого, разумеется, не учу, пишу только наш опыт, с ним можно согласиться или нет — но у нас именно так… Всегда рад комментариям, которые заставляют задуматься и взглянуть на то, что делаем с другого ракурса.
В 2022 году мы чуть-чуть выросли по сравнению с 2021 годом и, как напишу ниже, февральские события оказали существенное влияние (да и на графике выше это заметно по марту 2022 г.). Сразу отмечу, что расходы и доходы — перетекающий остаток (декабрь 2021 на январь 2022 и т. п.), поэтому не ищите подвоха в том, что расходы больше доходов. Все что зарабатываем тратим на команду, на себя и на инновации (да-да, копошимся потихоньку и пытаемся нащупать новые ниши в этом бизнесе).
Итак…
1. Это проектный бизнес. Я мечтаю о продуктовом бизнесе, где затраты, по мере роста клиентской базы, растут не так линейно. В парсинге вы столкнетесь с обратным. Сейчас у нас 6 программистов fulltime и я понимаю, что если придут 2-3 крупных клиента — будем нанимать еще ребят (место, ПК, обучение и т. п.).
2. Продукт из парсинга нам сделать сложно. Подходили к этому «снаряду» пару раз, начинали и… бросали. Не утверждаю, что продуктовый подход тут не подойдет, но у нас видимо не хватает знаний, чтобы сделать. Решили больше даже не начинать :)
3. Аналитика никому особо не нужна. В комментариях к прошлым публикациям было много советов, что нужно делать аналитику и продавать дороже. Воодушевился, кинулись и … у нас не получилось. Не просят, не нужно, делают сами внутри своих систем (1С, Ексель, PowerBI, Google BigQuery и т. п.) . Плюнули и теперь даже не пытаемся. Концентрируемся на стабильном парсинге и предоставлении данных. Формат, кстати, не важен - csv/json/xml/excel - просят по разному.
4. Матчинг товаров не получается. Вы не поверите, но постоянно пишут микро-команды из очень умных ребят (пишу без малейшей иронии), которые предлагают сделать матчинг товаров с использованием "новых алгоритмов на базе (сверточных, пузырьковых и т. п.) нейронных сетей" и зарабатывать вместе. Даем на тестирование два набора данных аптечных сетей и просим связать товары между собой. Результат? Немногим лучше, чем с использованием вот этого бесплатного модуля для Excel. Я не утверждаю, что это невозможно, но факт в том, что за много лет у нас так и не получилось делать матчинг товаров лучше, чем руками человека.
5. СВО повиляло. Ощутили резкое падение выручки, боялись что бизнес «усохнет». Много клиентов ушло, но спасло то, что 50% из них потом вернулись и пришли новые в конце весны. Спасает то, что данные всегда будут нужны.
6. Невозможно парсить все сайта. Есть сайты, которые мы не парсим в нужных объемах и отказываем клиентам. Кто-то скажет, мол это нехватка компетенций — не соглашусь. Дело в том, что когда у вас стоят задачи на неделю вперед по текущим клиентам, которые платят — команда будет заниматься не исследовательской работой, а именно этими горящими задачами.
Хотите проверить свои способности в парсинге — Леруа Мерлен, регионы Москва + Питер, данные каждый день по всем товарам. Получится? Мы с вами работаем :)
7. Холодные продажи у нас не работают. Мы так и не смогли внедрить «холодные» продажи на услугу парсинга. Делали несколько попыток, разными специалистами — не получается и все. Все клиенты приходят с сайта.
8. Поддержка только в «явочном порядке». Когда к вам приходит клиент и просит парсить, условно 450 сайтов (у нас есть такой), то отдел поддержки просто физически не сможет каждый день проверять содержимое всех CSV/XLS — файлов. Все, что удается системно делать — анализировать разницу в количестве данных между «вчера« и »сегодня» и при резком отличии в количестве — залезать «внутрь».
9. Вам будут нужны bare metal сервера — ищите просто где дешевле и все. Желательно в регионе, где находятся источники для вашего парсинга (у нас в ДЦ в Москве).
10. Вам потребуется хостер с безлимитным трафиком. Добавить нечего. Никаких «облаков» с тарификацией по гигабайтам.
11. Никогда не соглашайтесь на парсинг изображений. Только ссылки на картинки на сайтах-первоисточниках. Вопрос в авторском праве, ну а главное — объем данных. Будет много сайтов, вы просто не «переварите» объемы.
12. Вам нужен будет хостер, кто адекватно воспринимает abuse. Раз в квартал хостер будет получать abuse от тех сайтов, которые вы парсите. Не очень ведь здорово, если хостер просто отключит вам сервера? Поэтому договаривайтесь на «берегу».
13. Не занимайтесь парсингом персональных данных. Просить будут регулярно, не соглашайтесь. Причина? Это будет не бизнес, а временная «темка». Есть закон и он суров. Вы должны на 99% быть в правовом поле. Почему именно 99%? 1% оставляю на нюансы, которые вы будете обсуждать интимно с заказчиками (бывает разное, поверьте).
14. Вас будут постоянно просить сделать базы для спама. Каждый день мы получает 5-6 запросов на создание баз компаний, но каждый первый просит, чтобы в этой базе были личные контакты ЛПР (генерального, директора по маркетингу и т. п.). Решения нет, т. к. см. пункт выше про персональные данные.
15. Парсинг — это не rocket sience. Полно готовых библиотек, особенно для python и я уверен, что каждый может оказывать услуги парсинга в сегменте b2b. Что является вашим конкурентным преимуществом? Только известность и команда (я понимаю, что звучу как «капитан очевидность», но так и есть).
16. Язык программирования не важен. Добавить нечего. Клиента вообще не интересует, на чем вы программируете.
17. Не соглашайтесь на просьбы сделать «программку для парсинга». Парсинг — это услуга. Нас регулярно просят сделать «скрип, чтобы парсил на моем ПК». Отказываем. Причина? Ну думаю она и так понятна — замучают поддержкой, т. к. любой изменение разметки сайта и «скрипт» не работает.
18. Мобильные прокси — ваше «все». Добавить нечего. Советую иметь пару поставщиков.
19. Люди предпочитают писать заявки на парсинг с личных почтовых адресов. Объяснения этому у меня нет, просто примите как данность. Даже крупные, известные компании, заявки на парсинг часто пишут с личных адресов их сотрудников.
20. Поддержки очень много, поверьте. Нет, не так — ее просто «завались»! Половина команды работает над исправлением сбоев (изменилась разметка сайта — парсинг остановился), а половина — над подключением новых сайтов.
21. Cloudflare обходится. Тут добавить нечего. Скорость падает, это факт, но данные собираются. Да и qrator (ребята однозначно молодцы, защищают от ddos) тоже обходится.
22. Решение капчи — ваше «все». Сервисов полно, выбирайте любой на ваш вкус. Замедляет парсинг ощутимо и это как раз и приведет к тому, что части клиентов приходится отказывать в оказании услуги, ведь люди хотят парсить все и сразу :) — а так не получается.
24. Западные рынки? Не получилось. После выхода первых статей (ссылки выше), получил много предложений развивать парсинг на западных рынках (точнее глобальных — был Уругвай, Чили, Европа и т. п.). Не срослось и даже не могу внятно объяснить почему, просто факт. Полагаю, что для глобального развития нужен продукт, а парсинг — это услуга.
25. Будут клиенты на 500 сайтов и цена за каждый сайт падает. У нас есть клиент, для которого надо парсить ~450 сайтов в месяц. В месяц мы берем максимум 80 сайтов на подключение (не забывая про поддержку тех, которые уже подключили). Цена за сайт при таком количестве снижается до 2000 р. в месяц, а работы очень много.
На этом пока всё. Надеюсь, что было полезно и интересно. Больше информации вы можете найти в моем личном Телеграм- канале «Русский ИТ бизнес» — в нем пишу всю «изнанку», с чем сталкиваемся в процессе работы, без приукрашивания. Если что-то упустил — спрашивайте в комментариях, отвечу обязательно.
p.s. забыл добавить пункт 26 - продажа результатов парсинга нескольким клиентам - спешу вас разочаровать - в 90% запросов парсинг уникален и не подлежит перепродаже. А как бы хотелось...
Комментарии (29)
shornikov
00.00.0000 00:00Не пробовали договариваться с сайтами о прямой поставке данных?
Имея богатый опыт наверное можно найти и yml по типовым путям.makasin4ik Автор
00.00.0000 00:00ранее пробовали, но безрезультативно
Elenberg11
00.00.0000 00:00Расскажите, как пробовали? Я, как владелец некоторых данных, с удовольствием бы продал их за скромную мзду, нежели кто-то их все равно получит в обход меня)
makasin4ik Автор
00.00.0000 00:00на заре бизнеса писали :) просили ссылку на xml яндекс.маркет.
vanxant
00.00.0000 00:00У крупняка часто есть дилеры (мелкие перепродажники) и, очень часто, оптовый кабинет для таких дилеров. Или какая-нибудь рассылка прайса как минимум. Можно либо а) морду кирпичом и получить доступ к дилерскому прайсу "по первой колонке" или б) найти и как-то замотивировать уже имеющегося дилера.
Pitcentr0
00.00.0000 00:00+1Считаете ли вы программу Content Downloader достойной для выполнения задач парсинга ? На сколько я с ней работал у программы просто огромнейший функционал и возможности, разобраться сложно но функционал огромен.
Vsevo10d
00.00.0000 00:00Это будет не бизнес, а временная «темка». Есть закон и он суров. Вы должны на 99% быть в правовом поле. Почему именно 99%? 1% оставляю на нюансы, которые вы будете обсуждать интимно с заказчиками (бывает разное, поверьте).
Это в смысле случаи, когда заказчик и есть закон?
Aquahawk
00.00.0000 00:00Что-то я не понял, расходы примерно на 650 тыс рублей больше чем доходы. Прибыль то есть?
makasin4ik Автор
00.00.0000 00:00компания прибыльная. причина написана - перетекающий остаток в прошлых периодов
alekseyefremov
00.00.0000 00:00+2Какая доля парсинга (в % от числа сайтов и % от числа страниц) идет через chromium, а какая - средствами попроще?
Как работаете с сайтами типа ВИ, которые обфусцируют имена классов?
Какой средний сервер у вас и сколько он вывозит потоков chromium?
Понятно, что статья обзорная, но хотелось бы больше технических деталей! На раскрытие фирменных секретов претензии нет, интересны общие цифры и подходы.
GothicJS
00.00.0000 00:00Я не в теме, проясните, пожалуйста - парсинг это законно?)
vanxant
00.00.0000 00:00Пока вы ничего не взламываете и не собираете специнформацию типа персданных, почему нет? Если фирма А выложила в свободный доступ свой прайс-лист, ну раз в свободный - то фирма В может свободно эти данные получить.
DGN
00.00.0000 00:00Сам по себе, да. Вот использование данных, это уже на усмотрение клиента. К примеру, когда занимался картографией, была фишка указать лишний дом на улице, и если он вылезет у конкурента - предъявлять претензии.
xotta6bl4
00.00.0000 00:00+1Картографические данные сами по себе являются объектом авторского права ( у карты есть автор ),
содержимое каталога условного леруа объектом авторского права не является
Pest85
00.00.0000 00:00Есть ли разница в том какой парсер иcпользовать если сайт защищен капчей? Или в любом случае надо использовать платный сервис по решению капчи и разницы особо нет?
Игрался пару раз для себя по сбору данных, на некоторых сайтах так и не смог побороть - плюнул, забирал данные с сайта где на это подзабили.
sergey_privacy
00.00.0000 00:00+1>Хотите проверить свои способности в парсинге — Леруа Мерлен, регионы Москва + Питер, данные каждый день по всем товарам. Получится?
Код довольно простой для парсинга. И не такое парсили. Защита? А что они проверяют? Частоту захода с одного адреса? Так не надо заходить с одного адреса. Берем общедоступные списки проксиков, отдельным потоком их качаем, другим потоком проверяем на эталонной странице, потом через него выкачиваем одну страницу товаров и переходим к другому. Проксики не должны повторяться в течение хотя бы 15 минут. Между проверками можно добавлять рэндомный интервал. Защищаются по браузеру/окружению/агенту? Сделайте подборку реальных разрешений, языков, ОС, браузеров и каждому запросу придавайте уникальный "вид". Это - хром из винды с разрешением 4к, это обращение - мобилка-огрызкофон с сафари, это - линуксовый клиент с огнелисом и разрешением 2к. Я когда hh полностью парсил по своему региону, пришлось постоянно догонять их. Только что отдавали - раз, уже не отдают. Ввели новую защиту. Ок, обходим ее и парсим еще несколько дней.
>Мы с вами работаем :)
Да, но нет. Бизнес-модель низкомаржинальная и нежизнеспособная. Перед тем, как начинать какой то бизнес, нужно определить целевую аудиторию, примерный порядок потребителей вашего товара, насыщенность рынка, перспективы роста. Уже сейчас видно, что целевая аудитория минимальна. Донести до них информацию о своих услугах крайне проблематично. Реклама в интернете - самый дорогой вид рекламы и процент лидов с него (на каждый потраченный рубль) самый низкий. Даже существующие клиенты понимают, что при постоянной потребности проще посадить мальчика на 50к где-нибудь в регионе, который будет им клепать аналитику, чем отдавать вам сотни тысяч рублей. Поэтому со временем клиенты будут уходить.
>Цена за сайт при таком количестве снижается до 2000 р. в месяц, а работы очень много.
Это не просто низкомаржинально. Это - вообще убыточно. 2000-2500р и более - цена часа работы программиста для заказчика при заказе услуги в регионах. Компании с таким ценнником еле держатся на плаву, выручают объемы. Как только малейший факап, срок работ выползает за оценку и проект тут же становится убыточным. Нужен какой то "спонсор", который будет оплачивать все просадки в деньгах. Штрафы, факапы, скидки - все это потери, которые рано или поздно могут привести к разорению компании. Пока есть время, руки, готовая команда, лучше заранее изучить варианты и начать мигрировать в другую область работ. Там, где перспективы роста намного реальней, целевую аудиторию проще найти и она шире. Остаться без работы через несколько лет роста будет очень больно
Neels
Здравствуйте. Спасибо за статью, было интересно прочитать, но не понял одного момента.
> Леруа Мерлен, регионы Москва + Питер, данные каждый день по всем товарам.
Зашел на сайт и на первый взгляд, сайт просто выглядит. Я в парсинге хоть и профан, но в чём принципиальное отличие от других сайтов с товарами?
makasin4ik Автор
У них защита хороша
Mirzapch
Просто ради интереса. Можете сравнить защиту с avto.ru?
Парсил объявления и каталог.
domix32
А можно детализировать челлендж? Пока выглядит что запрос к их API выдаёт всю нужную информацию без необходимости заниматься парсингом всего сайта.
Marwin
а вы попробуйте открыть запрос апи в инкогнито... для апи нужен токен, который выдается только после прохождения браузерных проверок их системой защиты. Для каждого прокси адреса нужен свой токен, нужно 100500 раз проходить защиту хромиумом и либо продолжать открывать апи хромиумом, либо пытаться воспроизвести параметры запроса... да и токен легко банится при подозрительной частоте, то есть его надо постоянно обновлять тем же браузером. В общем, понятно, что нет ничего невозможного, просто очень ресурсоемко и медленно, а значит никаких "весь каталог за сутки"
domix32
Открыл сайт, рандомную категорию, нашел в инструментах разработчика XHR
getProducts
. ПКМ -> скопировать cURL. ВырубилAccept-Encoding
, чтобы непожатое получать, эмпирически выяснил что полеlimit
можно поднять с 30 до 90. Вставил в консоль и получил честный список товаров. Дальше `jq '.content'` и можно обрабатывать. На той категории, что смотрел было ~2500 предметов, соотвественно пишем скрипт который делает этот же запрос с некоторой задержкой, меняя полеoffset
в запросе. То бишь эта категория парсится за ~30-40 запросов. Если парсить сайт напрямую, то там только в этой категории 75 страниц, у которой ещё подстраницы для товаров разного формата. API отдаёт эти форматы как две отдельные записи, что опять же уменьшает количество запросов. В итоге запись 1 продукта с категории выглядит как-то такproduct
Достаточно ли этих данных или на страницах товаров нужны ещё какие-то данные? Потому и спросил про уточнение деталей.
Marwin
безусловно, я не отвечу за конкретный кейс топикстартера, но в нашем случае характеристики и описание тоже были нужны. Да, понятно, их не обязательно каждый день обновлять, как цены, но даже один раз пройтись - всё равно весьма небыстро.
Когда-то, действительно, бывает достаточно спарсить только листинг каталога и взять базовые названия и цену. Но чаще всё же надо заходить в деталки (делать отдельный запрос в api на каждый товар, и в случае наличия защит - это всё, приехали)