简单的HTML DOM解析器返回错误的元素树

时间:2013-04-07 05:59:32

标签: php html simple-html-dom

我遇到了HTML DOM解析器的问题。这是我用过的:

$url = 'http://topmmanews.com/2013/04/06/ufc-on-fuel-tv-9-results/';

$page = file_get_html($url);

$ret = $page->find("div.posttext",0);

应该给我一个计数($ ret-> children())= 10.但是,它只返回3,将第三个

之后的所有元素合并到它中仅创建了一个元素。

如果我的代码出现问题或者是简单的HTML DOM解析器错误,有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

正如Álvaro G. Vicario指出的那样,您的目标HTML在某种程度上是格格不入的。我尝试了你的代码,但正如你在这里看到的那样,它显示了三个孩子和另外6个节点:

enter image description here

但另一种可能有用的方法是像这样使用DOMDocumentDOMXPath

$url = 'http://topmmanews.com/2013/04/06/ufc-on-fuel-tv-9-results/';
$html = file_get_contents($url);
$dom = new DOMDocument();
$dom->loadHTML($html);

$dom_xpath = new DOMXpath($dom);

// XPATH to return the first DIV with class "posttext"
$elements = $dom_xpath->query("(//div[@class='posttext'])[1]");

然后,您可以遍历子节点并读取值或任何您想要的值。

答案 1 :(得分:0)

phpquery使用DOM,因此它是一个更可靠的解析器,带有错误的html:

$html = file_get_contents('http://topmmanews.com/2013/04/06/ufc-on-fuel-tv-9-results/');
$dom = phpQuery::newDocumentHTML($html);
$ret = $dom->find("div.posttext")->eq(0);
echo count($ret->children());
#=> 10