imoto Posted July 3, 2014 Report Share Posted July 3, 2014 День добрый, возникла проблема с парсером характеристик, заметил что и на демо не парсит, хотя товар есть в маркете, к примеру "Samsung Galaxy S5" Есть ли решение данной проблемы ? Quote Link to post Share on other sites
osben Posted July 4, 2014 Report Share Posted July 4, 2014 День добрый, возникла проблема с парсером характеристик, заметил что и на демо не парсит, хотя товар есть в маркете, к примеру "Samsung Galaxy S5" Есть ли решение данной проблемы ?вообще работает, проблема в выдаче Яндекс, так как по етому запросу (http://market.yandex.ru/search.xml?text=Samsung+Galaxy+S5&nopreciser=1) он выдает модели не из каталога, а просто предложение магазинов, Quote Link to post Share on other sites
imoto Posted July 4, 2014 Author Report Share Posted July 4, 2014 т.е те телефоны которые не в каталогах на них характеристику вытащить невозможно.А есть ли аналог какой нить чтоб не с yandexa парсил а с других магазинов ? Quote Link to post Share on other sites
osben Posted July 5, 2014 Report Share Posted July 5, 2014 т.е те телефоны которые не в каталогах на них характеристику вытащить невозможно.А есть ли аналог какой нить чтоб не с yandexa парсил а с других магазинов ?ето надо писать индивидульно под каждый магазин + не факт что ето возможно. (к примеру на сайте донара нету поиска) Quote Link to post Share on other sites
pasha814 Posted July 11, 2014 Report Share Posted July 11, 2014 Что-то у меня перестал работать парсер характеристик товаров.Парсер картинок работает как и раньше. Яндекс Маркет ничего не менял, никто не в курсе? Quote Link to post Share on other sites
Scodch Posted July 12, 2014 Report Share Posted July 12, 2014 То же самое, автоподбор свойств перестал работать. Походу Яндекс что-то поменял. Quote Link to post Share on other sites
LUN Posted July 12, 2014 Report Share Posted July 12, 2014 У меня такая проблема с понедельника...Я уже виду борьбу с хостингом и Яндекс-маркетом, и походу проблему мою решать никто не собирается. Что было мной сделано...1) Сначало я подумал что дело в max_input_varsя увеличил это значение но ничего не изменилось.2) потом Мы с хостингом пришли к мнению, что сайт размещается на общих условиях и что с моего IP есть какой-то сайт который который спамит на яндекс, из-за чего был заблокирован IP хостинга.Решили заказать услугу Индивидуальный IP адрес.Теперь у сайта свой собственный IP на котором больше нет никаких сайтов.Проблема не исчезла!Вот что пишет яндекс на мои письма =========================Здравствуйте!На сервисе Яндекс.Маркет с Вашего компьютера было зафиксировано большое количество запросов служебного характера и/или с частотой, недоступной человеку.Возможно, Вы используете программное обеспечение или дополнительные плагины к браузерам, производящие автоматические запросы к сервису. В этом случае, чтобы снова использовать поиск Яндекса, Вам необходимо отключить программное обеспечение, плагины, тулбары и т.д., которые могут задавать такого рода запросы.Если же Вы не задавали запросов такого рода, то, пожалуйста, проверьте Ваш компьютер антивирусом, поскольку они могут задаваться каким-либо плагином к браузеру или иной программой без Вашего ведома.=====================================================Я отправил эту переписку своему хостингу, они сказали что дело в моем сайте, и что нужно устранять проблему внутриним вмешательством. Что будем делать господа ? Quote Link to post Share on other sites
pasha814 Posted July 12, 2014 Report Share Posted July 12, 2014 Ну, меня Яндекс точно не мог в бан добавить, т.к. запросов было реально мало.LUN вон тоже IP менял, ничего не изменилось, так что думаю проблема в самом парсере. Quote Link to post Share on other sites
Mozzie Posted July 12, 2014 Report Share Posted July 12, 2014 Согласен что в парсере... скорее всего яша заблочил парсер нашей симплы=( и нужно новую писать есть кто сможет написать новый парсер???? готов обсудить!!! в личке. Quote Link to post Share on other sites
pasha814 Posted July 12, 2014 Report Share Posted July 12, 2014 Готов поучаствовать финансово в работе над новым парсером. Quote Link to post Share on other sites
LUN Posted July 12, 2014 Report Share Posted July 12, 2014 Считаю что в такой ситуации нужно всем объеденится и решить проблему, т.к. она массово проявляется на всей Симпле.Я удивляюсь что активность этой темы так мала, неужеле у других пользователей все работает ? Quote Link to post Share on other sites
pasha814 Posted July 12, 2014 Report Share Posted July 12, 2014 Да нет.Просто половина не знает про эту функцию, а вторая половина заполнила свои 500-600 товаров и работает с ними.И только 4 человека постоянно работают с каталогом своим Quote Link to post Share on other sites
Mozzie Posted July 13, 2014 Report Share Posted July 13, 2014 Ну так что есть умельцы которые могут помочь с этой проблемой? и довести его до ума!!! Quote Link to post Share on other sites
pikusov Posted July 14, 2014 Report Share Posted July 14, 2014 В связи с изменением алгоритма Яндекса и усилением их защиты от парсинга выпущена новая версия Simpla 2.3.6 с новым парсером товаров. Quote Link to post Share on other sites
coolbust Posted September 13, 2014 Report Share Posted September 13, 2014 Запилил новый магазин на 2.3.6 попробовал парсер характеристик - не работаетПопробовал админку демо с этого сайта - аналогично не работает Картинки парсит, но нужны именно характеристики... Друзья, есть рабочее решение этой проблемы? Quote Link to post Share on other sites
kib Posted September 25, 2014 Report Share Posted September 25, 2014 Что с парсером характеристик? Есть решение? Quote Link to post Share on other sites
coolbust Posted December 23, 2014 Report Share Posted December 23, 2014 Вот решение, у меня работает 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; } Quote Link to post Share on other sites
DressCode Posted December 24, 2014 Report Share Posted December 24, 2014 Может стоит так же добавить возможность ротации USERAGENT и возможность работы через прокси? Это всего-то пара дополнительных строчек curl_opt Quote Link to post Share on other sites
coolbust Posted December 24, 2014 Report Share Posted December 24, 2014 Идея хорошая, тогда для маркета мы будем постоянно с разного браузера тем самымон менее будет понимать что это бот, ну а прокси дает возможность менять ip скрипта, фича это присутствует, но она почему то не хочет работать, я пробовал рабочие прокси - не грузит Может найдется добрый человек кто допишет? Quote Link to post Share on other sites
Homa Posted December 28, 2014 Report Share Posted December 28, 2014 Файл залить рядом с /public_html/simpla/ajax/get_info.phphttps://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 раз Quote Link to post Share on other sites
yaskin Posted August 9, 2015 Report Share Posted August 9, 2015 Файл залить рядом с /public_html/simpla/ajax/get_info.phphttps://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 разперезалей, файл не найден Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.