php - 从 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"> </div>
解决方案
您正在尝试抓取一个使用 react 构建的网站。这可能不会那么容易。使用 React 或任何其他 javascript 框架呈现的页面仅通过 javascript 加载大部分内容。这意味着最初站点加载到 DOM 中,然后 javascript 将新内容添加到 DOM 中。如果您想从此类网站上抓取内容,您需要在无头浏览器中进行模拟和工作。您可以为此使用 PhantomJS。您可以尝试一些使用 phantomjs 的软件包。但我建议使用 nodejs 来使用 phantomjs 或 python。
推荐阅读
- python - TensorFlow 入门页面 - 打印前 5 行
- hadoop - 如何从配置单元查询中获取链接数据?
- vba - 比较并获得最佳日期和相关字段
- java - 随时接受更多 Observables 的 RxJava -2 Observables?
- webpack - 如何使用 webpack 预编译车把模板?
- python-3.x - Fsolve,从 matlab 复制代码,由于 Fsolve 要求,答案不匹配
- java - 需要 Java 数组帮助
- swift - 在没有 UINavigationController 的情况下使用 Alert 推送 UIViewController
- c# - 使用非英文文件名发布文件
- mysql - 带有 GROUP BY 的 COUNT + GROUP_CONCAT 返回错误值