以下是我要实现的目标:检索页面上的所有产品并将它们放入数组中。这是我正在使用的代码:
$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 how to get element?),但我仍然不明白如何让它发挥作用。
PS:我收到此错误:
调用未定义的方法
DOMDocument::getElementsByclassName()
答案 0 :(得分:32)
我终于使用了以下解决方案:
$classname="blockProduct";
$finder = new DomXPath($doc);
$spaner = $finder->query("//*[contains(@class, '$classname')]");
答案 1 :(得分:7)
https://stackoverflow.com/a/31616848/3068233
将此答案链接起来,因为这对我的问题帮助最大。
$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');
Theres the code and heres the usage
{{1}}
答案 2 :(得分:3)
function getElementsByClassName($dom, $ClassName, $tagName=null) {
if($tagName){
$Elements = $dom->getElementsByTagName($tagName);
}else {
$Elements = $dom->getElementsByTagName("*");
}
$Matched = array();
for($i=0;$i<$Elements->length;$i++) {
if($Elements->item($i)->attributes->getNamedItem('class')){
if($Elements->item($i)->attributes->getNamedItem('class')->nodeValue == $ClassName) {
$Matched[]=$Elements->item($i);
}
}
}
return $Matched;
}
// usage
$dom = new \DOMDocument('1.0');
@$dom->loadHTML($html);
$elementsByClass = getElementsByClassName($dom, $className, 'h1');