Dom и запрос xpath для разбора html - PullRequest
0 голосов
/ 21 ноября 2011

Я пытаюсь написать робота, который будет ежедневно получать html-разбор.Теперь для разбора html я мог бы использовать только строковые функции, такие как explode или регулярные выражения, но я обнаружил, что код dom xpath намного чище, так что теперь я могу сделать конфигурацию всех сайтов, которые мне нужны, и тегов, которые я должен вырезать, как:

'http://examplesite.com' => '//div/a[@class="articleDesc"]/@href'

Итак, код выглядит следующим образом

    @$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$tags = $xpath->query('//body/div[@class="articleDesc"]');


foreach ($tags as $tag) 
    echo $tag->nodeValue . "\n";

Итак, я получаю все теги div с описанием статьи класса, что мне здорово.Но я заметил, что все html-теги внутри тега div удалены.Интересно, как бы получить все содержимое этого div, на который я смотрю?

Мне также трудно найти какую-либо документацию для $ xpath-> query (), чтобы понять, как сформировать строку.Сайт php мало что говорит о его точном образовании.Тем не менее, моя главная проблема, я

Ответы [ 4 ]

2 голосов
/ 26 ноября 2011

Простой ответ:

foreach ($tags as $tag) 
    echo $dom->saveXML($tag);

Если вы хотите, чтобы html удалил теги, xpath будет

//a[@class="articleDesc"]

Предполагается, что теги a имеют атрибут class

1 голос
/ 21 ноября 2011

Попробуйте использовать http://www.php.net/manual/en/simplexmlelement.asxml.php

Или альтернатива :

function getNodeInnerHTML(DOMNode $oNode)   {
  $oDom = new DOMDocument();
  foreach($oNode->childNode as $oChild) {
    $oDom->appendChild($oDom->importNode($oChild, true));
  }
  return $oDom->saveHTML();
}
0 голосов
/ 26 ноября 2011

Вы можете использовать эту удивительную структуру паука (в Python) Scrapy

0 голосов
/ 25 ноября 2011

Это также должно загрузить все внутренние теги. Хотя это не DOM, они взаимозаменяемы. А позже вы можете dom_import_simplexml перенести его обратно в DOM.

$xml=simplexml_load_string($html);
$tags=$xml->xpath('//body/div[@class="articleDesc"]');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...