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

时间:2013-12-22 11:24:02

标签: php curl 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 how to get element?),但我仍然不明白如何让它发挥作用。

PS:我收到此错误:

  

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

3 个答案:

答案 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');