Автоматический поиск товаров на барахолках OLX, Besplatka, SkyLots, IZI

[28.10.2020] Проект обновился — добавлена новая барахолка — izi.ua!

Напомню, sherlock-ua.bid — это сервис, который позволяет регулярно, в автоматическом режиме проверять наши барахолки:

  • OLX
  • Besplatka
  • SkyLots
  • IZI
на предмет появления товаров, попадающих под заданный фильтр. Отчет о новых предложениях сбрасывается на почту раз в сутки.

Основные возможности и фишки:
Ключевые слова и фразы для поиска можно обьединять через И-ИЛИ, что позволяет охватить максимум результатов, например, настроив поиск чтобы включать слова с частоупотребимыми ошибками (сабвуфер, саббуфер, самбуфер — OMG, как его только не пишут...)

Отчет на почту представляет собой «diff» между вчерашними результатами и сегодняшними. Таким образом огромную простыню вы получаете только первый раз, потом будут только новые товары за последние сутки.

Отписываться от обновлений не обязательно, вы можете просто игнорировать не интересующие вас более письма. Отписка произойдет автоматически — либо по истечении времени указанного при создании фильтра, либо по истечении 90 дней.

Есть фильтрация по цене.

Чтобы не регистрироваться можно заходить через Facebook :)

Использованные технологии:
PHP, MySQL, Drupal-8

Адрес сервиса: sherlock-ua.bid

На первой странице посмотрите краткое видео :)

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

Комментарии, пожелания, вопросы, предложения приветствуются!

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Добавил поддержку izi.ua, теперь парсер барахолок еще лучше :)

Колись DOU парсив також на PHP (зараз вже парсер на Go), глянув репозиторій і є пару побажань

Ось це:

    $rawResultsFlattened = [];
    foreach ($snipeRawResults as $resultsPerURL) {
      foreach ($resultsPerURL as $oneResult) {
        $rawResultsFlattened[] = $oneResult;
      }
      unset($oneResult);
    }
    unset($resultsPerURL);
легко змінювати на
// $rawResultsFlattened = call_user_func_array('array_merge', $snipeRawResults);
$rawResultsFlattened = array_merge(...$snipeRawResults);

І ось це new $objName краще уникати і замінити на switch:

$objName = $itemSniperFullNamespacePath.$marketID . '_ItemSniper';

$sniperObject = new $objName($urlsSetForGivenMarket[$i], 5);

І ще, коли вже ти перейдеш на сторону Go?

Дякую, наче оператор «три крапки» і не новий але постійно за нього забуваю )

Еще один вариант стеклянного дома с туалетом на лужайке?

А теперь сделай агрегатор и начинай с него зарвбатывать

а как это все под капотом работает — если не секрет? у барахолок появился АПИ открытый или это просто краулинг скраппинг и прочие слова? ответные меры в виде бана айпи серверов или еще что не прилет?

судя по слову друпал в статье, это краулинг, может даже с какими то прокси

Не секрет, более того — кому интересно почитать исходники, там на сайте внизу есть ссылка. Работает это следующим образом: парсим страницы барахолок с помощью библиотеки PHP Query и находим нужную информацию. API у барахолок для таких задач пока нет. Я постарался реализовать максимально добросовестный парсинг:

      Парсятся страницы не более первых 5 в выдаче. Если выдача более 5 страниц то явно то что вы ищете это распространенная лежащая на каждом углу вещь, данный инструмент не для этого; либо слишком «размыт» поисковый запрос — ну от этого не убережешься.
      Страницы дергаем курлом, в качестве User-Agent прописан какой-то популярный браузер + еще какие-то настройки.
      Все полученные картинки кешируются на месяц, таким образом надолго исключаем повторное обращение за картинками.
      Результаты по поисковому запросу также кешируются, но это короткоживущий кеш, он рассчитан на то чтобы не дергать барахолки по одному и тому же вопросу много раз в то время пока пользователь играется с конструктором запросов. Ну то есть сделал запрос — посмотрел выдачу, потом вернулся на шаг назад, внес правки в запрос (например добавил еще одно ключевое слово, или добавил фильтр по цене), сделал еще запрос и т. д. Такие результаты кешируются на непродолжительное время, исключая серию одинаковых запросов.

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

    Парсятся страницы не более первых 5 в выдаче

    Так я и сам могу просмотреть. По факту приходится просматривать просто таки кучи мусора, потому что сами барахолки вмешиваются в запрос.

    Челлендж: найди на OLX «клавиатура», так чтобы он не подсовывал «мышь», коврики для мыш, и тому подобное дерьмо.

    Не проблема, можно прикрутить функционал «минус слова». Технически это совсем не сложно. Я планировал это на следующий апдейт.

    В принципе, правильная идея. Неправильная — это использовать сторонний сервис для сервисов, обладающих своим поиском. Его целевая аудитория именно поиск редкостей.

    А вот со словарями названий одного и того же по-разному всё-таки стоит поиграться, в идеале, где-нибудь таковой спизить прокачанный. И начать... с русско-украинского. Потому что как ни крути, часть будет подавать объяву на русском, часть на украинском.

    Целью может быть устройство на работу в один из таковых проектов. Но там могут не понравиться зарплаты — что есть предметом торга. Почему так считаю? Ну а кто ещё кроме дешёвых спецов станет городить такую ересь, что понадобится сторонний сервис?

    PS. А с разделением на страницы — делай реакцию на прокрутку результатов пользователя. Так ты сможешь не тянуть и не кешировать картинки, а честно давать их в iframe того сайта, с которого тянешь, так ты вообще не будешь палиться как DDOS, браузер всё возьмёт напрямую. Ты же сможешь просматривать не 5 страниц, а к примеру 100 страниц, чего юзер никогда не сделает. Но просмотреть единым потоком — на раз. Опять же, ты можешь подгружать страницы не сразу, а по мере нажатия юзером кнопки или прокрутки, так не будешь палиться. Высший пилотаж — делать всё вообще на стороне юзера, за исключением случая когда надо наблюдать за появлением редкого объекта — тут уже бесплатно раз в сутки (ночью), если надо чаще — проси денег.

    Не надо недооценивать тупость искусственного интеллекта, таковым не являющегося. Забанят аж бегом. А то и просто из ревности — так бывает.

    Зачем такие сложности. Запрос нескольких страниц подряд — это нормальное поведение. Особенно если этот запрос ленивый.

    Картинки скачиваются и кешируются в один поток средствами PHP

    Guzzle дозволяє завантажувати через async

    Коли у 2013 році працював у веб студії T4web то один з проектів був «Besplatka»

    Підписатись на коментарі