使用DOMDocument获取<img>类的URL


DomXPath with DOMDocument to get <img> Class URL

我正在编写一个小scraper脚本,将找到具有特定类名的图像URL。我知道我的cURL和DOMDocument运行正常,甚至DomXPath真的(据我所知,没有错误),但我正在努力弄清楚如何获得xpath查询结果的URL。

我的代码:

$dom = new DOMDocument();
@$dom->loadHTML($x);
$xpath = new DomXpath($dom);
$div = $xpath->query('//*[@class="productImage"]');

var_dump($div);
echo $div->item(0);

如果我var_dump($x)页面输出没有问题。旋度很好。但是我不知道如何获得包含在$div中的数据。我正试图找到一个具有'productImage'类的图像,看起来像:

<img src="/uploads/5W/yP/5WyPP4l7Z-jmZRzu_MJ6zg/1077-d.jpg" border="1" alt="Album" class="productImage">

我想要那个图像标签的来源。

有什么建议吗?

$dom = new DOMDocument();
$dom->loadHTML($x);
$xpath = new DomXpath($dom);
$imgs  = $xpath->query('//*[@class="productImage"]');
foreach($imgs as $img)
{
    echo 'ImgSrc: ' . $img->getAttribute('src') .'<br />' . PHP_EOL;
}

试试……

==编辑:附加信息==

我在这里使用循环的原因是您可能会找到多个img。如果你知道只有一个元素(或者你想找到第一个dom节点),你可以通过domnodelist的item方法从domnodelist中访问这个元素,就像这样:

$dom = new DOMDocument();
$dom->loadHTML($x);
$xpath = new DomXpath($dom);
$img   = $xpath->query('//*[@class="productImage"]');
echo 'ImgSrc: ' . $img->item(0)->getAttribute('src') .'<br />' . PHP_EOL;

这里实际上不需要使用XPath,因为看起来您只是在寻找图像,这可以通过使用DOMDocument::getElementsByTagName(),后跟一个简单的过滤器来完成:

foreach ($dom->getElementsByTagName('img') as $image) {
    $class = $image->getAttribute('class');
    if (strpos(" $class ", " productImage ") !== false) {
        $url = $image->getAttribute('src');
        // do stuff
    }
}

然后,您可以使用DOMElement::getAttribute():

获得src属性。
echo $image->getAttribute('src');