Парсер интернет-магазинов на PHP

majento

Создатель
Регистрация
17 Май 2020
Сообщения
4
Реакции
31
Привет! Мне необходимо написать парсер товаров для интернет-магазинов (у нас порядка 200 товаров, по которым нужно знать актуальные цены конкурентов).

Пишу на PHP.

Для этих сайтов проблем нет (отправляем нужные заголовки, куки, рефер и все ОК:(
- NIX
- Chipdip

А вот с ними уже посложнее:
- Citilink // отдает заглушку и код 429
- DNS-Shop // кука ставится яваскриптом + fingerprint
- Pleer // код 204 - пустая страница
- Yandex Market // отдает код 200 - при этом это некий бинарный код (видимо зашифрованный)

Не пойму как к ним подступиться.
В браузере все ОК, а если скриптом обращаться, то лочит.
Посмотрел заголовки - вроде все что нужно передаю (заголовки, куки, рефер, юзер-агент), но получаю отлуп.

Если кто сталкивался с подобным - прошу помочь в решении проблемы.
 
Я бы советовал смотреть в сторону "headless" браузеров по типу PhantomJS, Selenium, SlimerJS или аналогичных. Они обычно для автоматизации тестирования применяются, но для парсеров тоже сгодятся, там есть возможность выполнять JS.
 
Я бы советовал смотреть в сторону "headless" браузеров по типу PhantomJS, Selenium, SlimerJS или аналогичных. Они обычно для автоматизации тестирования применяются, но для парсеров тоже сгодятся, там есть возможность выполнять JS.
да, возможно что придется в итоге, но они все громоздкие, хотелось бы с минимум кода обойтись

Например, тот же Ситилинк: Для просмотра ссылки Войди или Зарегистрируйся
В Fiddler загружается норм, а в пхп скрипте отдает код 429.
Чего может не хватать?

Код:
        $headers[] = 'User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'; // Googlebot
        $headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8';
        $headers[] = 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3';
        $headers[] = 'Cache-Control: max-age=0';
        $headers[] = 'Content-Type: text/html';
        $headers[] = 'Connection: keep-alive';
        $headers[] = 'Pragma: no-cache';
        $headers[] = 'Sec-Fetch-Dest: document';
        $headers[] = 'Sec-Fetch-Mode: navigate';
        $headers[] = 'Sec-Fetch-Site: cross-site';
        $headers[] = 'Sec-Fetch-User: 1';
        $headers[] = 'Upgrade-Insecure-Requests: 1';
 
Всё пашет
Код:
$url = "https://www.citilink.ru/product/cr2032-batareika-gp-lithium-5-sht-558943/";
$user_cookie_file = $_SERVER['DOCUMENT_ROOT'].'/coojes.txt';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36');
curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file);
curl_setopt($ch, CURLOPT_COOKIEJAR,  $user_cookie_file);
$html = curl_exec($ch);
curl_close($ch);
$tex = html_entity_decode($html);
print $tex;
 
2022-04-05_20h13_08.png

Видимо мой ИП сервера чисто забанили, хотя я не так часто обращался к сайту, странно
 
Прокси использовать тогда.
к php curl прикрутить просто
 
Прокси использовать тогда.
к php curl прикрутить просто
Само собой я это делал не через file_get_contents )

На третьем по счету хостинге норм отработал Ситилинк - видимо у него какой-то свой блек-лист на IP
 
Назад
Сверху