通过ClassName与DOMdocument()方法获取元素
这是我想要实现的:检索页面上的所有产品,并把它们放入一个数组中。 这是我正在使用的代码:
$page2 = curl_exec($ch); $doc = new DOMDocument(); @$doc->loadHTML($page2); $nodes = $doc->getElementsByTagName('title'); $noders = $doc->getElementsByClassName('productImage'); $title = $nodes->item(0)->nodeValue; $product = $noders->item(0)->imageObject.src;
它适用于$title but
不适用于产品。 有关信息,在HTML代码中,img标签看起来像这样:
<img alt="" class="productImage" data-altimages="" src="xxxx">
我一直在看( PHP的DOMDocument如何获取元素? ),但我仍然不明白如何使其工作。
PS:我得到这个错误:
调用未定义的方法
DOMDocument::getElementsByclassName()
我终于使用了以下解决scheme:
$classname="blockProduct"; $finder = new DomXPath($doc); $spaner = $finder->query("//*[contains(@class, '$classname')]");
https://stackoverflow.com/a/31616848/3068233
链接这个答案,因为它帮助我最大的这个问题。
function getElementsByClass(&$parentNode, $tagName, $className) { $nodes=array(); $childNodeList = $parentNode->getElementsByTagName($tagName); for ($i = 0; $i < $childNodeList->length; $i++) { $temp = $childNodeList->item($i); if (stripos($temp->getAttribute('class'), $className) !== false) { $nodes[]=$temp; } } return $nodes; }
代码和inheritance人的用法
$dom = new DOMDocument('1.0', 'utf-8'); $dom->loadHTML($html); $content_node=$dom->getElementById("content_node"); $div_a_class_nodes=getElementsByClass($content_node, 'div', 'a');