Как сделать парсер крупных сайтов и маркетплейсов на PHP, обходящий блокировки?

Ссылка скопирована
1 ответ

Сам вопрос:
Подскажите, что именно стоит изучать, на что акцентировать внимание, какие библиотеки использовать, чтобы создать желательно быстрый парсер маркетплейсов на PHP?
Если подробнее:
Посоветуйте,какой стек использовать, что почитать и изучить, чтобы реализовать следующий функционал:
Вводится в форму на сайте название определенного товара -> нажимается кнопка поиска -> формируется ссылка ( например для ВБ по этому товару -> парсятся определенные данные, типа цены, названия -> выводится на сайт.
Желательно, чтобы этот парсер работал асинхронно без перезагрузки страницы.

В общем мне нужно сделать парсер на PHP, который смог бы обходить блокировку таких сайтов, как Озон,Вайлдберриз, Яндекс.маркет, Авито, Леруа Мерлен и т.д.

Я пытался парсить с помощью guzzle+curl+phpQuery, но получалось только на мелких сайтах.

Если вы можете точно сказать, как это можно проще реализовать, но на другом языке, например, Python, то это тоже может помочь, только скажите, можно ли будет использовать парсер от Python на PHP сайте?

Я буду рад, даже если вы просто посоветуете, где найти качественную книгу/подробную статью о парсерах на PHP и обходе защиты от парсинга.

Дополнительно:

Если вам не помогли 100500 уже существующих ответов на этот вопрос, то вряд ли добавление еще одного хоть чем-то поможет.

  • можно ли будет использовать парсер от Python на PHP сайте?

    Да. Мне кажется что Python удобнее. И с точки зрения клиента - безразлично на чем был
    написан сайт (ASP.Net, Java, e.t.c.). Все равно ты будешь видеть текстовые ответы.

    обходить блокировку таких сайтов, как Озон,Вайлдберриз, Яндекс.маркет, Авито, Леруа Мерлен и т.д.

    На Github я находил сорцы для парсинга почти всех крупных форумов, торрент трекеров и прочего.

    Обходить блокировку с гарантией никто не умеет потому-что владельцы могут постоянно менять
    механизмы аутентификации.

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

  • mayton2019, дураков нет.
    Те, кто могут парсить с какой-никакой гарантией (и ценой неимоверных усилий, мобильных ферм и прочего), как например один поц который хвастался этим на Хабре, поднимают на этом неплохие денежки. И на халяву делиться ноу-хау не будут.
    Поэтому в сообществе будут бегать только такие вот пионеры-незнайки.
  • Подскажите, что именно стоит изучать, на что акцентировать внимание, какие библиотеки использовать, чтобы создать желательно быстрый парсер маркетплейсов на PHP?

    Зависит от ваших текущих знаний. Написать парсер сайтов можно на любом языке программирования, при желание. Удобнее всего, на мой взгляд сделать это на Python с использозованием библиотеки -- https://www.crummy.com/software/BeautifulSoup/bs4/doc/ либо на NodeJS.

    Посоветуйте,какой стек использовать, что почитать и изучить, чтобы реализовать следующий функционал:

    Python / Request / BeautifulSoup4 либо NodeJS / Axios / node-html-parser. Если осмелитесь писать на PHP, что на мой взгляд крайне не удобно, то guzzle + phpQuery, как вы уже сами и написали.

    Также, сейчас на многих сайтах используется технология SPA и клиентский рендеринг. Если в кратцы - то контент на сайт подгружается через API и рендерится с помощью JS. Если в тупую обратиться к такому сайту с сервера (например через curl), то с высокой долей вероятности мы получим пустую страницу.

    Для таких сайтов нужно использовать эмуляторы браузеров, например seleniumhq.org или https://pptr.dev/. Биндинги есть на Python и NodeJS, возможно и на PHP.

    можно ли будет использовать парсер от Python на PHP сайте?

    Да, можно просто написать API на Python и поднять сервис на отдельном поддомене или порту, а далее в JSON-формате возвращать данные на сайт и делать с ними дальнейшие операции.

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

    1. Каждый запрос рандомизируем заголовки (request headers) и User-Agent. Обязательно. Тут без вариантов.

    2. Делаем запросы исключительно через proxy + каждый запрос рандомизируем их. В идеале иметь пулл из ~20 проксей. Крайне желательно чтобы прокси были приватными.

    3. Если уперлись в капчу, то делаем повторный запрос с другой прокси, если сайт ни в какую не хочет нас пускать к контенту, то разгадываем капчу. Либо реализуем разгадывание руками пользователя (т.к у вас интерфейс есть), либо с помощью любого сервиса разгадывания капчи, типа https://capmonster.cloud/ru/ или https://rucaptcha.com/.

    Надеюсь я смог прояснить некоторые технические детали парсинга сайтов.

    Ответы:

    Для начала изучи регулярные выражения.

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Ирина WP Ответ

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

    1. Использование прокси-серверов: Прокси-серверы позволяют скрыть ваш реальный IP-адрес и обойти блокировки, наложенные на определенные IP-адреса. Вы можете использовать платные или бесплатные прокси-сервера для этой цели.

    2. Изменение User-Agent: Некоторые сайты блокируют запросы от автоматизированных скриптов по User-Agent. Вы можете изменить User-Agent вашего скрипта, чтобы он выглядел как обычный браузер.

    3. Использование задержек: Для предотвращения блокировок, стоит добавить случайные задержки между запросами к сайту. Это поможет снизить нагрузку на сервер и уменьшить вероятность блокировки.

    Пример использования прокси-серверов в парсере на PHP:

    $proxy = 'proxy_ip:proxy_port';
    $url = 'http://example.com';
     
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_PROXY, $proxy);
     
    $response = curl_exec($ch);
     
    if($response === false) {
        echo 'Error: ' . curl_error($ch);
    } else {
        echo $response;
    }
     
    curl_close($ch);

    $proxy = 'proxy_ip:proxy_port'; $url = 'http://example.com'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_PROXY, $proxy); $response = curl_exec($ch); if($response === false) { echo 'Error: ' . curl_error($ch); } else { echo $response; } curl_close($ch);

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

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно