我正在尝试使用
在源文件中,有一个id为'cards'的元素,它有两个子
结构如下:
我最终得到了一个页面,里面充满了“div | nameValue”,其中nameValue是嵌入式div的nodeValue,并且我无法定位锚点以获取它们的href值。
我在DOMDocument方面做错了什么明显的事情吗?或者这里可能有更多的事情发生了吗?
file_get_contents
获取HTML并使用DOMDocument
对象来提取网页内容。我的问题是我无法获得适当的信息。我不确定这是因为我错误地使用了DOMDocument
的方法,还是源文件中的(X)HTML质量较差。在源文件中,有一个id为'cards'的元素,它有两个子
div
。我想要第一个子元素,它有许多子div
,而这些子元素又有一个带有div
子元素的anchor
子元素。我想要从anchor
获取href
和其子div
的nodeValue。结构如下:
<div id="cards">
<div class="grid">
<div class="card-wrap">
<a href="linkValue">
<img src="..."/>
<div>nameValue</div>
</a>
</div>
...
</div>
<div id="...">
</div>
</div>
我使用$cards = $dom->getElementById("cards")
开始。我得到一个DOMText对象,一个DOMElement对象,一个DOMText对象,一个DOMElement对象和一个DOMText对象。然后,我使用$grid = $cards->childNodes->item(1)
获取第一个DOMElement对象,它可能是.grid
元素。然而,当我遍历$grid时,我使用:
foreach($grid->childNodes as $item){
if($item->nodeName == "div"){
echo $item->nodeName,' | ',$item->nodeValue,'<br>';
}
}
我最终得到了一个页面,里面充满了“div | nameValue”,其中nameValue是嵌入式div的nodeValue,并且我无法定位锚点以获取它们的href值。
我在DOMDocument方面做错了什么明显的事情吗?或者这里可能有更多的事情发生了吗?
if($item->nodeName == "div")
的判断,否则每隔一个请求就会输出 "text | nameValue",从而重复我的信息。我应该在这方面更清楚一些。我没想到这需要xpath,但我想学习它也是值得的... - sharfcard-wrap
也很容易选择...你有很多选择。使用vardump进行调试,你应该能够相当快地得到你想要的结果。如果这一切都说得通,请接受这个答案。 - Don Scott