Как стать автором
Обновить

19,6 млн рублей за 2022 год. Парсинг сайтов. 25 советов желающим заняться

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров14K
Всего голосов 40: ↑33 и ↓7+26
Комментарии29

Комментарии 29

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

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

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

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

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

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

Открыл сайт, рандомную категорию, нашел в инструментах разработчика 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": []
      }
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Леруа Мерлен

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

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

Повлияла.

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

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

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

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

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

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

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

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

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

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

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий