xpath 查询不返回数据

问题描述 投票:0回答:2

我试图弄清楚如何从网页上的特定 div 获取属性,但我的查询没有返回任何内容。我假设我的查询是错误的。

我正在尝试从此 div 获取 data-original url:

<div 
class="p-dynamic-image vox-lazy-load lazy-loaded” 
data-original="https://cdn2.vox-cdn.com/thumbor/Bv7HhgyCscPLXrx2qHPzo8dlU4g=/0x0:7015x4677/2050x1367/cdn0.vox-cdn.com/uploads/chorus_image/image/46369294/RzrFirefly_01_DA.0.0.jpg” 
style="background-image: url(https://cdn2.vox-cdn.com/thumbor/Bv7HhgyCscPLXrx2qHPzo8dlU4g=/0x0:7015x4677/2050x1367/cdn0.vox-cdn.com/uploads/chorus_image/image/46369294/RzrFirefly_01_DA.0.0.jpg);">
</div>

我的代码:

$xpath = new DOMXpath($page_dom);
$image = $xpath->query("//div[@class='p-dynamic-image vox-lazy-load lazy-loaded']/@data-original")->value;
echo $image . "<br />";

但这没有返回任何东西。

我做错了什么?

php web-scraping xpath
2个回答
2
投票

其实应该是:

<?php

$html_string ='<div 
class="p-dynamic-image vox-lazy-load lazy-loaded"
data-original="https://cdn2.vox-cdn.com/..." style="...">
</div>';

$dom = new DomDocument();
@$dom->loadHTML($html_string);
$xpath = new DOMXPath($dom);

echo $xpath->query(
    '//div[@class="p-dynamic-image vox-lazy-load lazy-loaded"]/@data-original')
        ->item(0)->value; // https://cdn2.vox-cdn.com/...

0
投票

编辑:

好吧,尝试使用这个(使用查询而不是 xpath)

$xpath = new DOMXpath($page_dom);

$results=$xml->query("//div[@class='p-dynamic-image vox-lazy-load lazy-loaded']/@data-original")->value;

foreach ($results as $image) {
    echo $image;

 }

再次编辑:请注意,您之前使用的方法适用于 SimpleXML,但对于 DOM,您似乎需要在 foreach 中执行此操作

© www.soinside.com 2019 - 2024. All rights reserved.