Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Парсер поисковой выдачи яндекса, не работатет парсер)
Chernichko  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 2
Пользователь №: 40177
На форуме: 10 лет, 7 месяцев, 6 дней
Карма:




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

Подскажите, в чем же ошибка той части, где непосредственно выводятся результаты поиска?
Очень хотелось бы разобраться.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Chernichko  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 2
Пользователь №: 40177
На форуме: 10 лет, 7 месяцев, 6 дней
Карма:




вот что выдает код

array (size=0)
empty
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
vital  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



int main(){printf("Hello World"); return 0;"}
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2490
Пользователь №: 20247
На форуме: 15 лет, 2 месяца, 26 дней
Карма: 63




Код парсера страницы мог банально устареть.
Возьмите и сами сделайте парсинг заново
https://code.google.com/p/phpquery/
вот этим классом проще и удобнее будет.


--------------------
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса