通过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');