Jump to content

Recommended Posts

День добрый, возникла проблема с парсером характеристик, заметил что и на демо не парсит, хотя товар есть в маркете, к примеру "Samsung Galaxy S5"

 

Есть ли решение данной проблемы ?

Link to post
Share on other sites

День добрый, возникла проблема с парсером характеристик, заметил что и на демо не парсит, хотя товар есть в маркете, к примеру "Samsung Galaxy S5"

 

Есть ли решение данной проблемы ?

вообще работает, проблема в выдаче Яндекс, так как по етому запросу (http://market.yandex.ru/search.xml?text=Samsung+Galaxy+S5&nopreciser=1) он выдает модели не из каталога, а просто предложение магазинов,  

Link to post
Share on other sites

т.е те телефоны которые не в каталогах на них характеристику вытащить невозможно.

А есть ли аналог какой нить чтоб не с yandexa парсил а с других магазинов ?

Link to post
Share on other sites

т.е те телефоны которые не в каталогах на них характеристику вытащить невозможно.

А есть ли аналог какой нить чтоб не с yandexa парсил а с других магазинов ?

ето надо писать индивидульно под каждый магазин + не факт что ето возможно. (к примеру на сайте донара нету поиска)

Link to post
Share on other sites

Что-то у меня перестал работать парсер характеристик товаров.
Парсер картинок работает как и раньше.

 

Яндекс Маркет ничего не менял, никто не в курсе?

Link to post
Share on other sites

У меня такая проблема с понедельника...

Я уже виду борьбу с хостингом и Яндекс-маркетом, и походу проблему мою решать никто не собирается.

 

Что было мной сделано...

1) Сначало я подумал что дело в max_input_vars

я увеличил это значение но ничего не изменилось.

2) потом Мы с хостингом пришли к мнению, что сайт размещается на общих условиях и что с моего IP есть какой-то сайт который который спамит на яндекс, из-за чего был заблокирован IP хостинга.

Решили заказать услугу Индивидуальный IP адрес.

Теперь у сайта свой собственный IP на котором больше нет никаких сайтов.

Проблема не исчезла!

Вот что пишет яндекс на мои письма 

=========================

Здравствуйте!

На сервисе Яндекс.Маркет с Вашего компьютера было зафиксировано большое количество запросов служебного характера и/или с частотой, недоступной человеку.

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

Если же Вы не задавали запросов такого рода, то, пожалуйста, проверьте Ваш компьютер антивирусом, поскольку они могут задаваться каким-либо плагином к браузеру или иной программой без Вашего ведома.

=====================================================

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

 

 

Что будем делать господа ?

Link to post
Share on other sites

Ну, меня Яндекс точно не мог в бан добавить, т.к. запросов было реально мало.

LUN вон тоже IP менял, ничего не изменилось, так что думаю проблема в самом парсере.

Link to post
Share on other sites

Согласен что в парсере... скорее всего яша заблочил парсер нашей симплы=( и нужно новую писать есть кто сможет написать новый парсер???? готов обсудить!!! в личке.

Link to post
Share on other sites

Считаю что в такой ситуации нужно всем объеденится и решить проблему, т.к. она массово проявляется на всей Симпле.

Я удивляюсь что активность этой темы так мала, неужеле у других пользователей все работает ?

Link to post
Share on other sites

Да нет.

Просто половина не знает про эту функцию, а вторая половина заполнила свои 500-600 товаров и работает с ними.

И только 4 человека постоянно работают с каталогом своим :D

Link to post
Share on other sites
  • 1 month later...

Запилил новый магазин на 2.3.6 попробовал парсер характеристик - не работает

Попробовал админку демо с этого сайта - аналогично не работает

 

Картинки парсит, но нужны именно характеристики...

 

Друзья, есть рабочее решение этой проблемы?

Link to post
Share on other sites
  • 2 weeks later...
  • 2 months later...

Вот решение, у меня работает https://yadi.sk/d/C0SgguDKda9AH

Заменить /public_html/simpla/ajax/get_info.php

<?php
/**
 * Simpla CMS
 *
 * @copyright	2014 Denis Pikusov
 * @link		http://simplacms.ru
 * @author		Denis Pikusov
 *
 */
 
// Немного настроек 
	
// Для использования прокси используйте строки:
define("USE_PROXY",		0);		// 1 = использовать прокси 
define("PROXY",			'xxx.xxx.xxx.xxx:80');		 
define("PROXY_USER",	'login:password');
define("REGION",		'213'); // 213 - москва, список регионов: http://search.yaca.yandex.ru/geo.c2n
define("DOMAIN",		'market.yandex.ru'); // для украины нужно market.yandex.ua
 
session_start();
// Временный файл для хранения cookies
// Так как временный файл существует до окончания выполнения скрипта,
// сохраняем его содержимое в сессию
$cookies_filename = tempnam(sys_get_temp_dir(), 'yandex_market_cookies');
if(!empty($_SESSION['yandex_market_cookies']))
	file_put_contents($cookies_filename, $_SESSION['yandex_market_cookies']);
// Для изменения региона нужно обратиться сюда
$url = 'http://tune.yandex.ru/region/?retpath=http%3A%2F%2Fmarket.yandex.ru';
get_page($url);
// Ключевое слово для поиска
$keyword = $_GET['keyword'];
// Если нам запостили капчу, отправим ее на проверку
if(!empty($_GET['captcha']))
{
	 $page = get_page("http://".DOMAIN."/checkcaptcha?key=".urlencode($_SESSION['captcha_key'])."&retpath=".urlencode(html_entity_decode($_SESSION['captcha_retpath']))."&rep=".urlencode($_GET['captcha']));
}
// Адрес страницы с результатами поиска
$url = "http://".DOMAIN."/search.xml?cvredirect=2&text=".urlencode($keyword);
// Выбираем результаты поиска
$page = get_page($url);
//print($page);
if(preg_match("/(http:.*\/captchaimg.*)\"\s/ui", $page, $match))
{
	$captcha_image = $match[1];
	
	if(preg_match('/<input type="hidden" name="key" value="(.*)">/ui', $page, $match))
	{
		$_SESSION['captcha_key'] = $match[1];
	}
	
	if(preg_match('/<input type="hidden" name="retpath" value="(.*)">/ui', $page, $match))
	{
		$_SESSION['captcha_retpath'] = $match[1];
	}
	
}
$result = new stdClass();
if(!empty($captcha_image))
{
	$result->captcha = base64_encode(get_page($captcha_image));
	//print "<form><img src='data:image/jpeg;base64," . base64_encode(get_page($captcha_image)) . "' /><input type=text name=captcha><input type=text name=keyword value='$keyword'><input type=text name=captcha_key value='$captcha_key'><input type=text name=captcha_retpath value='$captcha_retpath'><input type=submit></form>";
}
$result->product = parse_product($page);
header("Content-type: application/json; charset=UTF-8");
header("Cache-Control: must-revalidate");
header("Pragma: no-cache");
header("Expires: -1");		
print(json_encode($result));
// Функция забирает содержимое страницы по указанному URL
function get_page($url, $level=0)
{
	// Имя временного файла, в котором хранятся куки для CURL
	global $cookies_filename;
	
	// Максимальный уровень рекурсии
	$max_level = 20;
	if($level >= $max_level)
		return false;
	// Должен быть установлен curl
	if(!function_exists('curl_init'))
	{
		trigger_error("curl does not exists");
		return false;
	}
	// Инициализируем curl
	$ch = curl_init(); 
	curl_setopt($ch, CURLOPT_URL, $url); 
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
	curl_setopt($ch, CURLOPT_HEADER, true);
	curl_setopt($ch, CURLOPT_USERAGENT, "Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.9.168 Version/11.51");
	curl_setopt($ch, CURLOPT_TIMEOUT, 10);	
	curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies_filename);
	curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies_filename);
	curl_setopt($ch,CURLOPT_HTTPHEADER, array(
		'Accept   text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
		'Accept-Language:ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
		'Connection:keep-alive',
	));	
	// Нужно установить регион
	$cookies_content = file_get_contents($cookies_filename);
	$new_cookies_content = preg_replace('/(yandex_gid).*/', "$1\t".REGION, $cookies_content);
	if($new_cookies_content == $cookies_content)
		$new_cookies_content .= "\n.yandex.ua\tTRUE\t/\tFALSE\t1\tyandex_gid\t".REGION."\n.yandex.ru\tTRUE\t/\tFALSE\t0\tyandex_gid\t".REGION;
	file_put_contents($cookies_filename, $new_cookies_content);	
	
	// Яндекс любит рефереров и реже банит, если реферер правдоподобный
	// Указываем реферером адрес, запрошенный в прошлый раз
	if(!empty($_SESSION['yandex_market_last_visited_url']));
		curl_setopt($ch, CURLOPT_REFERER, $_SESSION['yandex_market_last_visited_url']);
	// Настройки прокси:
	if(USE_PROXY)
	{
		curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 
		curl_setopt($ch, CURLOPT_PROXY, PROXY); 
		curl_setopt($ch, CURLOPT_PROXYUSERPWD, PROXY_USER); 
	}
	// Выполняем запрос по адресу
	$data = curl_exec($ch);
	//if(!$data)
	//{
//		trigger_error(curl_error($ch));
	//	return false;
//	}
	// Проверяем код ответа для проверки, нет ли редиректа
	$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
	
	// Больше нам curl не нужен
	curl_close($ch);
	
	// Записываем в сессию куки, которые отложил curl во временный файл
	$_SESSION['yandex_market_cookies'] = file_get_contents($cookies_filename);
	
	// Отделяем тело страницы от заголовка
	$dataArray = explode("\r\n\r\n", $data, 2);
	
	// Делим ответ на заголовок и тело
	if(count($dataArray)!=2)
		return false;	
			
	list($header, $body) = $dataArray;
	// В случае редиректа рекурсивно следуем за яндексом
	if($httpCode == 301 || $httpCode == 302)
	{
		$matches = array();
		preg_match('/Location:(.*?)[\n$]/', $header, $matches);
		if(isset($matches[1]))
		{			
			// Рекурсивно запрашиваем страницу по адресу редиректа
			$body = get_page(trim($matches[1]), $level+1);
		}
	}
	// В случае 404 пробуем еще несколько раз - яндекс часто глючит и отдает 404
	if($httpCode == 404)
	{
		$body = get_page($url, $level+1);
	}
	
	// Сохраняем последний посещенный URL для реферера
	$_SESSION['yandex_market_last_visited_url'] = $url;
	
	// Отдаем тело страницы
	return $body;
}
// Функция отдает результат парсинга страницы
function parse_product($page)
{
	// Если это страница товара, ишем описание
	if(preg_match_all('/<ul class="b-vlist b-vlist_type_mdash b-vlist_type_friendly">(.*?)/ui', $page, $matches))
	{
		// Описание товара
		$description = '<ul>'.reset($matches[1]).'</ul>';
		$result = new stdClass;
		$result->description = $description;
		
		// Страница характеристик
		if(preg_match_all('/<p class="b-model-friendly__title"><a href="(.*?)">/ui', $page, $matches))
		{
			$options_url = 'http://'.DOMAIN.reset($matches[1]);
			
			$options_page = get_page($options_url);
			preg_match_all('/<th class="b-properties__label b-properties__label-title"><span>(.*?)<\/span><\/th><td class="b-properties__value">(.*?)<\/td>/ui', $options_page, $matches, PREG_SET_ORDER);
			
			$options = array();
			foreach($matches as $m)
			{
				$option = new stdClass;
				$option->name = $m[1];
				$option->value = $m[2];
				$options[] = $option;
			}
			$result->options = $options;
		}
		else
			return false;
	}
	// Иногда яндекс отдает не страницу конкретного товара, а список товаров
	// В этом случае переходим на страницу первого товара в списке
	elseif(preg_match_all('/<h3 class="b\-offers__title"><a .*href="(\/model\.xml.*?)"/ui', $page, $matches))
	{                        
		$product_url = 'http://'.DOMAIN.reset($matches[1]);		
		$page = get_page($product_url);
		return parse_product($page);
	}	
	else
		return false;
	return $result;
}
Link to post
Share on other sites

Идея хорошая, тогда для маркета мы будем постоянно с разного браузера тем самым

он менее будет понимать что это бот, ну а прокси дает возможность менять ip скрипта, фича это присутствует, но она почему то не хочет работать, я пробовал рабочие прокси - не грузит :)

 

Может найдется добрый человек кто допишет?

Link to post
Share on other sites

Файл залить рядом с /public_html/simpla/ajax/get_info.php

https://drive.google.com/file/d/0B11nBtii5IVvRXhySHhxTFJndUE/view?usp=sharing

 

Подключить в любом мете до инициализации cURL, у меня в самом верху

 

include_once("random_user_agent.php");

 

Заменить настройки браузера в cURL c: 

    curl_setopt($ch, CURLOPT_USERAGENT, "Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.9.168 Version/11.51");

на: 

    curl_setopt($ch, CURLOPT_USERAGENT,random_user_agent());

 

помогло на 1 раз

Link to post
Share on other sites
  • 7 months later...

Файл залить рядом с /public_html/simpla/ajax/get_info.php

https://drive.google.com/file/d/0B11nBtii5IVvRXhySHhxTFJndUE/view?usp=sharing

 

Подключить в любом мете до инициализации cURL, у меня в самом верху

 

include_once("random_user_agent.php");

 

Заменить настройки браузера в cURL c: 

    curl_setopt($ch, CURLOPT_USERAGENT, "Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.9.168 Version/11.51");

на: 

    curl_setopt($ch, CURLOPT_USERAGENT,random_user_agent());

 

помогло на 1 раз

перезалей, файл не найден

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...