首页 > 解决方案 > 从 xpath 获取背景图像 url

问题描述

我尝试了以下代码,它返回null

$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
$doc->strictErrorChecking = false;
$doc->recover = true;

ini_set('user_agent', 'My-Application/2.5');
libxml_use_internal_errors(true);
$doc->loadHTMLFile('https://www.revolve.com/elliatt-cassini-dress/dp/ELLI-WD346/?d=Womens&srcType=hp_recs_viewed');
$xpath = new DOMXPath($doc);
$imgs = $xpath->query('//*[@class="zoomWindow "]');
foreach($imgs as $b){
    $datae[] = array(
        'img' => $xpath->evaluate(
            "substring-before(substring-after(./@style, \"background-image: url('\"), \"')\")",
        $b
        ),
    );
}
    

这是相关的div元素,

<div style="z-index: 999; position: absolute; float: left; height: 536.406px; width: 355.141px; margin-top: 0px; margin-left: 0px; border: 0px solid rgb(136, 136, 136); background-position: -426.067px -499.099px; background-repeat: no-repeat; cursor: crosshair; overflow: hidden; background-image: url("https://is4.revolveassets.com/images/p4/n/z/ELLI-WD346_V1.jpg"); top: 0px; left: 0px; display: none;" class="zoomWindow">&nbsp;</div>

标签: phplaravelxpath

解决方案


您正在尝试抓取一个使用 react 构建的网站。这可能不会那么容易。使用 React 或任何其他 javascript 框架呈现的页面仅通过 javascript 加载大部分内容。这意味着最初站点加载到 DOM 中,然后 javascript 将新内容添加到 DOM 中。如果您想从此类网站上抓取内容,您需要在无头浏览器中进行模拟和工作。您可以为此使用 PhantomJS。您可以尝试一些使用 phantomjs 的软件包。但我建议使用 nodejs 来使用 phantomjs 或 python。


推荐阅读