совершенно новая тема для меня парсеры. мне надо написать как через 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;
Подскажите, в чем же ошибка той части, где непосредственно выводятся результаты поиска?
Очень хотелось бы разобраться.