【问题标题】:xpath query not returning dataxpath查询不返回数据
【发布时间】:2015-05-22 23:00:52
【问题描述】:

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

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

<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 xpath scrape


    【解决方案1】:

    其实应该是:

    <?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/...
    

    【讨论】:

    • 谢谢,这确实得到了 url。但是我想在没有 getAttribute 的情况下这样做,这可能吗?还是没有解决办法?
    • @felipsmartins 他的问题是如何做到没有 getAttribute。换句话说,在纯 xpath 中。
    • @nomistic 哦,我明白了。你是对的!斯科特,您应该将 nomistic 的答案标记为正确答案,因为它解决了您的问题。
    【解决方案2】:

    编辑:

    好的尝试使用这个(使用查询而不是 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 中执行此操作

    【讨论】:

    • 嗯,我的 echo 仍然没有打印任何东西?
    • 很遗憾没有,仍然没有打印出来。
    • 您可能还需要将--&gt;value 放回(使用foreach)抱歉。如果没有,你能用你的 xpath 得到什么吗?
    • 当我添加 -> 值回来时,我得到:警告:为 foreach() 提供的参数无效,是的,我正在使用 xpath 来抓取其他东西。这只是我正在努力解决的内容
    • hmm,现在它抛出一个致命错误:致命错误:不能在写上下文中使用方法返回值,它不喜欢 foreach 循环
    猜你喜欢
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多