php-使用DOMDocument的Web刮板
作者:互联网
我试图使用file_get_contents抓取HTML,然后使用DOMDocument对象来抓取网页内容.我的问题是我无法获得适当的信息.我不确定这是因为我使用DOMDocument的方法错误,还是源中的(X)HTML不好.
在源代码中,有一个ID为’cards’的元素,其中有两个子div.我想要第一个孩子,该孩子有很多孩子div,而孩子又有一个固定孩子和div孩子.我想要来自锚点的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”){很可能会排除任何< a>标签.另外,我不认为childNodes允许递归迭代.
因此,要访问有问题的节点,可以使用:
$children = $dom->getElementById("cards")->childNodes
->item(1)->childNodes->item(1)->childNodes;
但是,正如您所看到的,这非常混乱……XPath简介:
> http://php.net/manual/en/class.domxpath.php
> http://www.w3schools.com/xpath/xpath_syntax.asp
标签:domdocument,php 来源: https://codeday.me/bug/20191120/2044631.html