Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2022, 11:01   #1
Chaser_81
Пользователь
 
Регистрация: 09.04.2007
Сообщений: 37
Лампочка Парсер интернет-магазинов на PHP

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

Пишу на PHP.

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

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

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

Если кто сталкивался с подобным - прошу помочь в решении проблемы.
SiteAnalyzer - анализ и аудит сайта. Telegram: @majento
Chaser_81 вне форума Ответить с цитированием
Старый 06.04.2022, 01:52   #2
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,455
По умолчанию

Citilink все отлтично
Pleer все отлично
Yandex Market все отлично

А вот с ДНС, не все так просто, там надо либо селениумом парсить либо исполнять js скрипт, генерировать нужный key и редиректить с нужными параметрами, там все видно в коде.
uberchel вне форума Ответить с цитированием
Старый 06.04.2022, 09:57   #3
Chaser_81
Пользователь
 
Регистрация: 09.04.2007
Сообщений: 37
По умолчанию

Цитата:
Сообщение от uberchel Посмотреть сообщение
Citilink все отлтично
Pleer все отлично
Yandex Market все отлично

А вот с ДНС, не все так просто, там надо либо селениумом парсить либо исполнять js скрипт, генерировать нужный key и редиректить с нужными параметрами, там все видно в коде.
Ситилинк видимо забанил меня, хотя я не так уж и часто к нему обращался

Pleer - юзер-агент Googlebot?

Yandex Market - а тут какие заголовки передавались?
Изображения
Тип файла: jpg 2022-04-05_20h13_08.jpg (33.5 Кб, 1 просмотров)
SiteAnalyzer - анализ и аудит сайта. Telegram: @majento
Chaser_81 вне форума Ответить с цитированием
Старый 06.04.2022, 11:22   #4
Chaser_81
Пользователь
 
Регистрация: 09.04.2007
Сообщений: 37
По умолчанию

На другом хостинге вообще отдает яваскрипт и также ошибку 429, что не так в коде?

Код:
<?php
	function get_page_cook($url)
	{
		$ch = curl_init();

		curl_setopt($ch, CURLOPT_URL, $url);
		// curl_setopt($ch, CURLOPT_HEADER, 0);
		// curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
		curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate, br');
		curl_setopt($ch, CURLOPT_TIMEOUT, 30);
		curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
		curl_setopt($ch, CURLOPT_REFERER, 'https://www.google.com/');
		// curl_setopt($ch, CURLOPT_AUTOREFERER, true);
		// curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

		curl_setopt($ch, CURLOPT_COOKIE, 1);
		curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/_cookie.txt');
		curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/_cookie.txt');

		$r = parse_url($url);
		$host = $r['host'];

		$headers = array();
		// $headers[] = 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0';
		$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[] = 'Cache-Control: no-cache, private';
		$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-Site: none';
		$headers[] = 'Sec-Fetch-User: ?1';
		// $headers[] = 'Transfer-Encoding: chunked';
		$headers[] = 'Upgrade-Insecure-Requests: 1';
		$headers[] = 'Host: '.$host;

		// $headers[] = 'Dnt: 1';
		// $headers[] = 'Authority: https://www.google.com/';

		curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

		$result = curl_exec($ch);
		$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

		if (curl_errno($ch))
		{
			$result = 'Error:' . curl_error($ch);
		}

		curl_close($ch);

		return $http_code.' / '.$result;
	}

	echo get_page_cook("https://www.citilink.ru/product/cr2032-batareika-gp-lithium-5-sht-558943/");
?>
SiteAnalyzer - анализ и аудит сайта. Telegram: @majento
Chaser_81 вне форума Ответить с цитированием
Старый 06.04.2022, 11:27   #5
Chaser_81
Пользователь
 
Регистрация: 09.04.2007
Сообщений: 37
По умолчанию

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

И тем не менее, остается вопрос по Yandex Market и ДНС
Для ДНС как можно исполнить скрипт через PHP?
SiteAnalyzer - анализ и аудит сайта. Telegram: @majento
Chaser_81 вне форума Ответить с цитированием
Старый 06.04.2022, 13:30   #6
Chaser_81
Пользователь
 
Регистрация: 09.04.2007
Сообщений: 37
По умолчанию

Яндекс Маркет у меня выдает какуюто ерунду
Изображения
Тип файла: png 2022-04-06_13h28_46.png (85.9 Кб, 0 просмотров)
SiteAnalyzer - анализ и аудит сайта. Telegram: @majento
Chaser_81 вне форума Ответить с цитированием
Старый 06.04.2022, 14:29   #7
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,455
По умолчанию

Цитата:
Сообщение от Chaser_81 Посмотреть сообщение
Яндекс Маркет у меня выдает какуюто ерунду
Яндекс отдает страницу в GZip, смотрите в коде у себя, почему не срабатывать декодирование.
uberchel вне форума Ответить с цитированием
Старый 06.04.2022, 16:09   #8
Chaser_81
Пользователь
 
Регистрация: 09.04.2007
Сообщений: 37
По умолчанию

Цитата:
Сообщение от uberchel Посмотреть сообщение
Яндекс отдает страницу в GZip, смотрите в коде у себя, почему не срабатывать декодирование.
С яндексом разобрался, спасибо

А что по ДНС можно придумать без того же селениума?
SiteAnalyzer - анализ и аудит сайта. Telegram: @majento
Chaser_81 вне форума Ответить с цитированием
Старый 06.04.2022, 19:15   #9
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,455
По умолчанию

Как вариант если хочется быстро без писанины большого кода, можно использовать уже устаревший, но еще более менее годный phantomjs
uberchel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработчикам модулей интернет магазинов TrackRu Фриланс 0 17.12.2019 10:46
Обновление цен интернет-магазинов blin09 Фриланс 5 20.09.2013 07:49
Конструктор интернет-магазинов dvuwka PHP 5 01.06.2011 23:39