0

我正在编写一个小爬虫脚本,它将找到具有特定类名的图像 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) 页面输出没有问题。所以 CURL 工作正常。但我不知道如何获取 $div 中包含的数据。我正在尝试查找具有“productImage”类的图像,如下所示:

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

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

有什么建议么?

4

2 回答 2

2
$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 访问 elelement - 如下所示:

$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;
于 2013-04-17T08:15:07.577 回答
-1

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

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

然后,您可以src使用以下方法获取属性DOMElement::getAttribute()

echo $image->getAttribute('src');
于 2013-04-17T08:19:33.113 回答