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

Валерий Людимов
Валерий Людимов
  • Сообщений: 4
  • Последний визит: 15 февраля 2025 в 00:32

У меня свой маркетплейс, на платформе DST Marketplace, возник вопрос с наполнением, подскажите, что именно стоит изучать, на что акцентировать внимание, какие библиотеки использовать, чтобы создать желательно быстрый парсер маркетплейсов на PHP?

Если подробнее:

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

Вводится в форму на сайте название определенного товара -> нажимается кнопка поиска -> формируется ссылка ( например для ВБ по этому товару -> парсятся определенные данные, типа цены, названия -> выводится на сайт.

Желательно, чтобы этот парсер работал асинхронно без перезагрузки страницы.

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

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

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

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

Антон Тишин
Антон Тишин
  • Сообщений: 5
  • Последний визит: 15 февраля 2025 в 00:28

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

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

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

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

Валерий Людимов
Валерий Людимов
  • Сообщений: 4
  • Последний визит: 15 февраля 2025 в 00:32

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

Антон Тишин
Антон Тишин
  • Сообщений: 5
  • Последний визит: 15 февраля 2025 в 00:28

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

Валерий Людимов

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

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

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

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

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

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

Авторизуйтесь, чтобы писать на форуме.

Заявка на услуги DST

Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.

Адрес

Ижевск, ул. Воткинское шоссе, д. 170 Е, Технопарк Нобель, офис 1117

8 495 1985800
Заказать звонок

Режим работы: Пн-Пт 10:00-19:00

info@dstglobal.ru

Задать вопрос по почте

Укажите ваше имя
Укажите ваше email
Укажите ваше телефон