Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > Парсинг удалённого HTML файла


Автор: taral 10.11.2008, 19:25
У меня возникла потребность в парсинге определённой страници с интернета. До у меня не возникало нужды работать с DOM.
Код

    $url = 'http://yandex.ru/';
    $html = file_get_contents($url);
    $doc = new domDocument('1.0', 'windows-1251');
    $doc->loadHTML($html);
    $items = $doc->getElementsByTagName('a');
    for ($i = 0; $i < $items->length; $i++) {
         $r = $items->item($i)->nodeValue . "<br/>";
         echo $r;
    }

Этот пример работает.
Если я пробую другой сайт. Например google
выдает вот что.
Код

Severity: Warning
Message: DOMDocument::loadHTML() [function.DOMDocument-loadHTML]: htmlParseEntityRef: expecting ';' in Entity, line: 35

Ошибку выдает в строке $doc->loadHTML($html);
Я так понимаю что PHP не может разобрать DOM структуру того HTML.
Каким образом происходит работа с не валидными документами?
Допустим мне нужно вытянуть текст div у которого id="aaa".
Использовать регулярные выражения? Или есть лучше способ?

Автор: destrd 10.11.2008, 21:25
Ну да, где regexp'ы, где explod'ы и работа со строками. Больше я думаю ничего тут не придумать.

Автор: taral 10.11.2008, 21:57
Ясно спасибо. Просто я до этого только в JavaScript с DOM работал.
Ну и привык что все просто выходит) Буду дерзать.

Автор: skyboy 11.11.2008, 00:38
Цитата(taral @  10.11.2008,  18:25 Найти цитируемый пост)
Ошибку выдает в строке $doc->loadHTML($html);

хм. а дерево-то строится? между прочим, это не ошибка, а предупреждения. после выдачи предупреждения скрипт вполне себе продолжает работу, просто честно предупреждает - "со мной чей-то не то, могу глючить". а http://ua2.php.net/manual/en/domdocument.loadhtml.phpи  заявлен как метод для загрузки "not well-formed XML"

Добавлено через 1 минуту и 34 секунды
а ругается, скорее всего, на & который не превращен в &amp; - потому как пытается распарсить в "?param1=value1&param2="  некую xml-entity &param2 и ругается на несуществование подобного.

Автор: getme 16.11.2008, 22:43
дерево построится, Я к примеру просто подавляю @$doc->loadHTML($html); предупреждение
ничего критического в этом невижу.

Автор: bars80080 17.11.2008, 00:18
а вот это фигово, что в случае, который ты можешь пофиксить, ты игнорируешь, а не исправляешь

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)