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

Я ранее рассказывал про наш опыт развития бизнеса на парсинге сайтов в двух статьях (часть 1 и часть 2). Теперь хочу подвести итоги 2022 года и дать некоторые советы командам, которые хотят составить нам конкуренцию (не вижу, кстати, в этом ничего страшного, т. к. рынок довольно большой и скорее всего у вас будет свой путь, отличный от нашего). Никого, разумеется, не учу, пишу только наш опыт, с ним можно согласиться или нет — но у нас именно так… Всегда рад комментариям, которые заставляют задуматься и взглянуть на то, что делаем с другого ракурса.

Выдержка из банк-клиента - 2022 год.
Выдержка из банк-клиента - 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)


  1. Neels
    00.00.0000 00:00

    Здравствуйте. Спасибо за статью, было интересно прочитать, но не понял одного момента.
    > Леруа Мерлен, регионы Москва + Питер, данные каждый день по всем товарам.
    Зашел на сайт и на первый взгляд, сайт просто выглядит. Я в парсинге хоть и профан, но в чём принципиальное отличие от других сайтов с товарами?


    1. makasin4ik Автор
      00.00.0000 00:00

      У них защита хороша


      1. Mirzapch
        00.00.0000 00:00

        Просто ради интереса. Можете сравнить защиту с avto.ru?

        Парсил объявления и каталог.


      1. domix32
        00.00.0000 00:00

        А можно детализировать челлендж? Пока выглядит что запрос к их API выдаёт всю нужную информацию без необходимости заниматься парсингом всего сайта.


        1. Marwin
          00.00.0000 00:00

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


          1. domix32
            00.00.0000 00:00

            Открыл сайт, рандомную категорию, нашел в инструментах разработчика XHR getProducts. ПКМ -> скопировать cURL. Вырубил Accept-Encoding, чтобы непожатое получать, эмпирически выяснил что поле limit можно поднять с 30 до 90. Вставил в консоль и получил честный список товаров. Дальше `jq '.content'` и можно обрабатывать. На той категории, что смотрел было ~2500 предметов, соотвественно пишем скрипт который делает этот же запрос с некоторой задержкой, меняя поле offset в запросе. То бишь эта категория парсится за ~30-40 запросов. Если парсить сайт напрямую, то там только в этой категории 75 страниц, у которой ещё подстраницы для товаров разного формата. API отдаёт эти форматы как две отдельные записи, что опять же уменьшает количество запросов. В итоге запись 1 продукта с категории выглядит как-то так

            product
            {
                  "productPriceCategory": "STD",
                  "price": {
                    "additional_as_main": false,
                    "main_price": 20070,
                    "previous_price": null,
                    "main_uom": "NIU",
                    "main_uom_rus": "шт.",
                    "currency": "RUB",
                    "additional_price": null,
                    "previous_additional_price": null
                  },
                  "productLink": "/product/vanna-marka-one-modern-akril-180x70-sm-92710321/",
                  "displayedName": "Ванна Marka One MODERN акрил 180х70 см",
                  "eligibility": {
                    "homeDeliveryEligible": true,
                    "relayPointEligible": true,
                    "storeDeliveryEligible": false,
                    "webEligible": true
                  },
                  "mediaMainPhoto": {
                    "mobile": "https://cdn.leroymerlin.ru/lmru/image/upload/f_auto,q_auto,w_150,h_150,c_pad,b_white,d_photoiscoming.png/v1633289804/lmcode/WQRsHmZavkKxfN4ykypUOA/92710321.jpg",
                    "tablet": "https://cdn.leroymerlin.ru/lmru/image/upload/f_auto,q_auto,w_180,h_180,c_pad,b_white,d_photoiscoming.png/v1633289804/lmcode/WQRsHmZavkKxfN4ykypUOA/92710321.jpg",
                    "desktop": "https://cdn.leroymerlin.ru/lmru/image/upload/f_auto,q_auto,w_150,h_150,c_pad,b_white,d_photoiscoming.png/v1633289804/lmcode/WQRsHmZavkKxfN4ykypUOA/92710321.jpg"
                  },
                  "brand": "MARKA ONE",
                  "source": "Pim",
                  "productId": "92710321",
                  "variants": {
                    "axes": [],
                    "products": []
                  }
                }
            

            Достаточно ли этих данных или на страницах товаров нужны ещё какие-то данные? Потому и спросил про уточнение деталей.


            1. Marwin
              00.00.0000 00:00

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

              Когда-то, действительно, бывает достаточно спарсить только листинг каталога и взять базовые названия и цену. Но чаще всё же надо заходить в деталки (делать отдельный запрос в api на каждый товар, и в случае наличия защит - это всё, приехали)


  1. shornikov
    00.00.0000 00:00

    Не пробовали договариваться с сайтами о прямой поставке данных?
    Имея богатый опыт наверное можно найти и yml по типовым путям.


    1. makasin4ik Автор
      00.00.0000 00:00

      ранее пробовали, но безрезультативно


      1. Elenberg11
        00.00.0000 00:00

        Расскажите, как пробовали? Я, как владелец некоторых данных, с удовольствием бы продал их за скромную мзду, нежели кто-то их все равно получит в обход меня)


        1. makasin4ik Автор
          00.00.0000 00:00

          на заре бизнеса писали :) просили ссылку на xml яндекс.маркет.


          1. vanxant
            00.00.0000 00:00

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


  1. Pitcentr0
    00.00.0000 00:00
    +1

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


    1. makasin4ik Автор
      00.00.0000 00:00

      я с ней к сожалению не работал вообще!


  1. Vsevo10d
    00.00.0000 00:00

    Это будет не бизнес, а временная «темка». Есть закон и он суров. Вы должны на 99% быть в правовом поле. Почему именно 99%? 1% оставляю на нюансы, которые вы будете обсуждать интимно с заказчиками (бывает разное, поверьте).

    Это в смысле случаи, когда заказчик и есть закон?


    1. Fortran148
      00.00.0000 00:00

      Заказчик почти всегда закон в таких случаях.


  1. Aquahawk
    00.00.0000 00:00

    Что-то я не понял, расходы примерно на 650 тыс рублей больше чем доходы. Прибыль то есть?


    1. makasin4ik Автор
      00.00.0000 00:00

      компания прибыльная. причина написана - перетекающий остаток в прошлых периодов


  1. alekseyefremov
    00.00.0000 00:00
    +2

    Какая доля парсинга (в % от числа сайтов и % от числа страниц) идет через chromium, а какая - средствами попроще?

    Как работаете с сайтами типа ВИ, которые обфусцируют имена классов?

    Какой средний сервер у вас и сколько он вывозит потоков chromium?

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


    1. makasin4ik Автор
      00.00.0000 00:00
      +1

      попрошу ребят из команды ответить. я боюсь навру


  1. foxyrus
    00.00.0000 00:00
    +6

    Леруа Мерлен

    Так вот почему у них постоянно сайт тормозит.


  1. JuriiDetochkin
    00.00.0000 00:00
    +1

    5. СВО повиляло — или повлияло?


    1. Golickoff
      00.00.0000 00:00
      +2

      Повлияла.


  1. GothicJS
    00.00.0000 00:00

    Я не в теме, проясните, пожалуйста - парсинг это законно?)


    1. vanxant
      00.00.0000 00:00

      Пока вы ничего не взламываете и не собираете специнформацию типа персданных, почему нет? Если фирма А выложила в свободный доступ свой прайс-лист, ну раз в свободный - то фирма В может свободно эти данные получить.


    1. DGN
      00.00.0000 00:00

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


      1. xotta6bl4
        00.00.0000 00:00
        +1

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


  1. Pest85
    00.00.0000 00:00

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


  1. sergey_privacy
    00.00.0000 00:00
    +1

    >Хотите проверить свои способности в парсинге — Леруа Мерлен, регионы Москва + Питер, данные каждый день по всем товарам. Получится?

    Код довольно простой для парсинга. И не такое парсили. Защита? А что они проверяют? Частоту захода с одного адреса? Так не надо заходить с одного адреса. Берем общедоступные списки проксиков, отдельным потоком их качаем, другим потоком проверяем на эталонной странице, потом через него выкачиваем одну страницу товаров и переходим к другому. Проксики не должны повторяться в течение хотя бы 15 минут. Между проверками можно добавлять рэндомный интервал. Защищаются по браузеру/окружению/агенту? Сделайте подборку реальных разрешений, языков, ОС, браузеров и каждому запросу придавайте уникальный "вид". Это - хром из винды с разрешением 4к, это обращение - мобилка-огрызкофон с сафари, это - линуксовый клиент с огнелисом и разрешением 2к. Я когда hh полностью парсил по своему региону, пришлось постоянно догонять их. Только что отдавали - раз, уже не отдают. Ввели новую защиту. Ок, обходим ее и парсим еще несколько дней.

    >Мы с вами работаем :)

    Да, но нет. Бизнес-модель низкомаржинальная и нежизнеспособная. Перед тем, как начинать какой то бизнес, нужно определить целевую аудиторию, примерный порядок потребителей вашего товара, насыщенность рынка, перспективы роста. Уже сейчас видно, что целевая аудитория минимальна. Донести до них информацию о своих услугах крайне проблематично. Реклама в интернете - самый дорогой вид рекламы и процент лидов с него (на каждый потраченный рубль) самый низкий. Даже существующие клиенты понимают, что при постоянной потребности проще посадить мальчика на 50к где-нибудь в регионе, который будет им клепать аналитику, чем отдавать вам сотни тысяч рублей. Поэтому со временем клиенты будут уходить.

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

    Это не просто низкомаржинально. Это - вообще убыточно. 2000-2500р и более - цена часа работы программиста для заказчика при заказе услуги в регионах. Компании с таким ценнником еле держатся на плаву, выручают объемы. Как только малейший факап, срок работ выползает за оценку и проект тут же становится убыточным. Нужен какой то "спонсор", который будет оплачивать все просадки в деньгах. Штрафы, факапы, скидки - все это потери, которые рано или поздно могут привести к разорению компании. Пока есть время, руки, готовая команда, лучше заранее изучить варианты и начать мигрировать в другую область работ. Там, где перспективы роста намного реальней, целевую аудиторию проще найти и она шире. Остаться без работы через несколько лет роста будет очень больно