使用 DOMdocument() 方法按类名获取元素

2022-08-30 23:58:27

以下是我试图实现的目标:检索页面上的所有产品并将它们放入数组中。以下是我正在使用的代码:

$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;

它适用于不适用于产品。有关信息,在HTML代码中,img标记如下所示:$title but

<img alt="" class="productImage" data-altimages="" src="xxxx">

我一直在研究这个(PHP DOMDocument如何获取元素?),但我仍然不明白如何使它工作。

PS : 我得到这个错误:

调用未定义的方法DOMDocument::getElementsByclassName()


答案 1

我最后用了以下解决方案:

    $classname="blockProduct";
    $finder = new DomXPath($doc);
    $spaner = $finder->query("//*[contains(@class, '$classname')]");

答案 2

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;
}

有代码,这里是用法

$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');

推荐