我遇到了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解析器错误,有人可以帮助我吗?
答案 0 :(得分:1)
正如Álvaro G. Vicario
指出的那样,您的目标HTML在某种程度上是格格不入的。我尝试了你的代码,但正如你在这里看到的那样,它显示了三个孩子和另外6个节点:
但另一种可能有用的方法是像这样使用DOMDocument
和DOMXPath
:
$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