[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Парсер поисковой выдачи яндекса
Chernichko
здравствуйте.
совершенно новая тема для меня парсеры. мне надо написать как через curl'ы так и через яндекс.xml.

никогда раньше с этим не сталкивалась.
Нашла код парсера через curl'ы:

function get_page($url) 
{
$ch = curl_init();
$options = array(
CURLOPT_TIMEOUT => 15,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_URL => $url,
CURLOPT_USERAGENT => 'Google Chrome'
);

curl_setopt_array($ch, $options);
$data = curl_exec($ch);

curl_close($ch);
return $data;
}

function set_utf8_meta($page)
{
return preg_replace('/<head[^>]*>/',
'<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">',
$page);
}

$query = 'парсер яндекса'; // запрос
$url = 'http://yandex.ru/yandsearch?text='.urlencode($query).'&lr=213&numdoc=50';
// 213 - регион (Москва) / numdoc=50 - на первой странице выдачи будет 50 позиций, а не 10

$page = get_page($url); // скачиваем страницу
$page = set_utf8_meta($page); // выставляем нужный нам meta content


libxml_use_internal_errors(true); // дает нам управление над ошибками
$dom = new DOMDocument(); // создаем объект класса и выставляем немного настроек
$dom->preserveWhiteSpace = false;
$dom->resolveExternals = false;
$dom->validateOnParse = false;
$dom->loadHTML($page);
$xpath = new DOMXpath($dom); // создаем объект класса DOMXpath

$serp_items = $xpath->query('//li[contains(@class, "b-serp-item")]');
//$serp_items->length; // кол-во результатов на странице

$links = array();

foreach ($serp_items as $item)
{
$_tmp = array();
$header_obj = $xpath->query('./h2', $item)->item(0);

$_tmp['position'] = (int)$xpath->query('./b', $header_obj)->item(0)->nodeValue;

$link_obj = $xpath->query('./a', $header_obj)->item(0);
$_tmp['url'] = $link_obj->getAttribute('href');
$_tmp['url_text'] = trim(preg_replace('/\s+/i', ' ', $link_obj->nodeValue));
// немного чистим строку и убираем лишние пробелы

$links[] = $_tmp;
}

var_dump($links); // тут-то и находятся первые 10 результатов со страницы

но возвращает он пустой массив (array(0)).

Однако, вот эта часть работает: (работает несколько раз, а потом яндекс начинает думать, что я робот и выдает станицу с капчей)


function get_page($url) 
{
$ch = curl_init();
$options = array(
CURLOPT_TIMEOUT => 15,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_URL => $url,
CURLOPT_USERAGENT => 'Google Chrome'
);

curl_setopt_array($ch, $options);
$data = curl_exec($ch);

curl_close($ch);
return $data;
}

$query = 'парсер яндекса'; // запрос
$url = 'http://yandex.ru/yandsearch?text='.urlencode($query).'&lr=213&numdoc=50';

$page = get_page($url); // скачиваем страницу

echo $page;

Подскажите, в чем же ошибка той части, где непосредственно выводятся результаты поиска?
Очень хотелось бы разобраться.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.