[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Парсилка html страниц - что не так ?
zmiy
Всех приветствую.
Стояла задача написать парсилку для хтмл кода.
Написал такой небольшой скриптик
но почему то он не отрабатывает.
В данном случае не стал усложнять себе жизнь и использовать большой xpath.
хочу выдрать значение тега title из полученной странички Яндекса.

Скрипт:
<?

//////открываем коннект к серверу и запрашиваем адрес странички
$fp = fsockopen ("yandex.ru", 80, $errno, $errstr, 30);
fwrite($fp, "GET / HTTP/1.1\r\n" );
fwrite($fp, "Host: nevatravel.ru\r\n");
fwrite($fp, "User-Agent: -BlackBerry\r\n");
fwrite($fp, "Connection: Close\r\n\r\n");
///// собираю страничку
if (!$fp) {
exit ("Fail");
} else {
while (!feof($fp)) { $context.= fgets ($fp,1024); }
fclose ($fp);
}
////echo "$context"; //// можно посмотреть что мы получаем с сервера

/// Функция подготовки html-кода для работы с DOM

function prepareForDOM($html, $encoding) {
$html = iconv($encoding, 'UTF-8//TRANSLIT', $html);
$html = preg_replace('/<(script|style|noscript)\b[^>]*>.*?<\/\1\b[^>]*>/is', '', $html);
$tidy = new tidy();
$config = array(
'drop-font-tags' => true,
'drop-proprietary-attributes' => true,
'hide-comments' => true,
'indent' => true,
'logical-emphasis' => true,
'numeric-entities' => true,
'output-xhtml' => true,
'wrap' => 0
);
$tidy->parseString($html, $config, 'utf8');
$tidy->cleanRepair();
$html = $tidy->value;
$html = preg_replace('#<meta[^>]+>#isu', '', $html);
$html = preg_replace('#<head\b[^>]*>#isu', "<head>\r\n<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />", $html);
return $html;
};
$html = prepareForDOM($context, 'windows-1251');
////// загружаем html и сохраняем в xml
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xml = simplexml_import_dom($dom);
$result = $xml->xpath('title');
foreach ($result as $node) {
echo 'title: ' . $node . '<br>';
}



?>


Пожалуйста, помогите новичку.




Спустя 3 часа, 8 минут, 15 секунд (4.12.2010 - 17:47) vagrand написал(а):

preg_match('#<\s*title\s*>([^\<\>]+)<\s*\/\s*title\s*>#i', $html, $matches);
var_dump($matches);

Спустя 2 минуты, 21 секунда (4.12.2010 - 17:49) zmiy написал(а):
Регуляки не интересны.
Это просто пример, интересует работа с xpath.
т.к. в дальнейшем придется парсить таблицы.

Спустя 16 часов, 44 минуты, 34 секунды (5.12.2010 - 10:34) zmiy написал(а):
Php программисты.
Подскажите, что я не так делаю при работе c xpath ?
Не ужели никто не сможет сказать ?

Спустя 10 минут, 54 секунды (5.12.2010 - 10:45) kirik написал(а):
Цитата (zmiy @ 5.12.2010 - 02:34)
Подскажите, что я не так делаю при работе c xpath ?
Не ужели никто не сможет сказать ?

Нужно указывать либо полный путь (/html/head/title), либо использовать здвездочку (*/title), либо указывать относительный путь (head/title).

Спустя 1 минута, 54 секунды (5.12.2010 - 10:47) zmiy написал(а):
пробовал не работает.
Есть возможность запустить этот скриптик у себя локально ?
Что бы посмотреть

Спустя 6 минут, 9 секунд (5.12.2010 - 10:53) kirik написал(а):
Выдает:
Цитата
title: 302 Found<br>

Спустя 24 секунды (5.12.2010 - 10:53) zmiy написал(а):
Простой пример отработал.
Прошу прощения.
А если взять такой путь. то возвращаемого значения нет
$result = $xml->xpath('/html/body/table[9]/tbody/tr/td/table/tbody/tr[31]/td[4]');

Спустя 1 минута, 5 секунд (5.12.2010 - 10:54) zmiy написал(а):
допустим я паршу не яндекс а сайт:
$fp = fsockopen ("nevatravel.ru", 80, $errno, $errstr, 30);
fwrite($fp, "GET /tours/search/mos/thl/03.12.2010/r644/all/all/8/all/all/price/all/all/rubspb/ HTTP/1.1\r\n" );

Спустя 6 минут, 5 секунд (5.12.2010 - 11:00) kirik написал(а):
Цитата (zmiy @ 5.12.2010 - 02:54)
допустим я паршу не яндекс а сайт:

А они вам разрешали себя парсить? smile.gif
Где вы там нашли tbody?

Спустя 1 минута, 44 секунды (5.12.2010 - 11:02) zmiy написал(а):
Допустим разрешали rolleyes.gif
путь вытягиваю через firebug

Спустя 12 минут, 13 секунд (5.12.2010 - 11:14) kirik написал(а):
Цитата (zmiy @ 5.12.2010 - 03:02)
путь вытягиваю через firebug

файрфокс любит доставлять tbody и thead'ы..

Спустя 2 минуты (5.12.2010 - 11:16) zmiy написал(а):
Спасибо.
Может в этом и ошибка. пошел искать правильные пути.
О результатах отпишусь.

Спустя 10 минут, 29 секунд (5.12.2010 - 11:27) zmiy написал(а):
Кстати еще вопрос.
А может он не верно искать, то что из получаемого контента я не обрезаю заголовки ?

Спустя 5 минут, 25 секунд (5.12.2010 - 11:32) zmiy написал(а):
kirik
Спасибо. Действительно fireBug отдавал не верный xpath.
Спасибо за помощь.
Тему можно закрыть
Быстрый ответ:

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