Парсер яндекс-маркета

Появился заказчик с интересной с технической точки зрения задачей по парсингу яндекс-маркета. Из основных требований — цены по 10к товаров должны обновляться как минимум 1 раз в сутки по всем позициям. В идеале максимально часто, насколько это возможно. При этом обновление не должно проходить больше 6 часов, поскольку иначе отставание цен будет слишком большим от текущих.

Первые мысли и варианты реализации.

Варианты готовых скриптов нас не сильно интересуют, потому что никто не даст 100% гарантии обхода существующих ограничений и проблем, да и качество подобных решений чаще всего оставляет желать лучшего. Самая главная техническая трудность — это защита яндекса от подобных манипуляций в виде запроса капчи. Конечно же на эту тему есть огромное количество обсуждений и вариантов решений, но дальше теории обычно такие решения не уходят. Я же попробую уйти в сторону от обсуждений и заняться реализацией, поскольку на любую защиту всегда есть несколько вариантов обхода.

Алгоритм фильтрации запросов яндексом самые разные и их достоверно сказать не может никто, есть только мнения о ряде факторов, которые могут влиять:

  • отключенный яваскрипт (отсутствие кук, проставляемых через js)
  • большое количество запросов с отключенными куками/яваскриптом
  • маленькие интервалы между запросами, нехарактерные для человека
  • слишком большая глубина просмотра/неестественное количество просматриваемых товаров
  • запросы с одной уникальной кукой но с разных ip адресов
  • попадание ip адреса в blacklist за один из предыдущих пунктов
  • аномально высокая частота показа капчи
  • ненормальные юзерагенты в запросах, нехарактерные для реальных пользователей
  • другие неизвестные факторы

Также есть ряд слухов по поводу того как снизить вероятность появления капчи при запросе, в реальности проверить их влияние врядли можно легко (если есть идеи — велкам в комментарии):

  • если делать запросы не чаще чем 12 запросов за 5 минут (или 1 запрос не чаще чем в 12 секунд, тут информация расходится) — то в этом случае яндекс вообще не показывает капчу.
  • использование добавки к юзерагенту от яндекс-бара снижает вероятность появления капчи
  • на мобильной версии действуют более мягкие ограничения

В качестве решения для максимального снижения перечисленных выше проблем при планировании архитектуры было принято решение использовать максимальное количество прокси-серверов для формирования запросов в маркет. Выполним подсчет необходимого количества прокси-серверов для обеспечения необходимых технических характеристик системы (при худших прогнозах).

Если рассчитывать на время работы парсера в 6 часов, получится скорость в 1667 товаров в час или 27,78 товаров в минуту или 138,89 товаров за 5 минут, или сканирование с 11,57  ip адресов. Умножим эту цифру за коэффициент запаса, получим 20 прокси-серверов, которые дадут возможность делать нужное количество запросов для получения приемлимых результатов.

Соответственно первой частью написания парсера будет создание скрипта, собирающего список открытых прокси-серверов из открытых источников, написание робота, проверяющего их доступность и качественные характеристики (не все прокси одинаково полезны, особенно если они будут передавать ip инициатора запроса).

По мере продвижения процесса, готовый результат по этой части выложу в последующих публикациях. Саму разработку обязательно выложу в открытый доступ на github или bitbucket.

Парсер яндекс-маркета: 6 комментариев

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

  1. Здравствуйте! Тоже интересует результат :-) Я еще смотрю на сторону Windows приложения, который будет открывать ссылки в компоненте webBrowser, который будет иницировать полноценного браузера с использованием JS (он нужен для получения cookie которые устанавливаются с подзагружаемыми скриптами). Но пока окончательного решения не нашел. Если хотите можем вместе поработать над решением этого вопроса.

  2. Здравствуйте,

    готов купить решение, если оно реально парсит, а не использует прокси, которые яндекс банит в течение пары дней

Добавить комментарий

Ваш e-mail не будет опубликован.