php - 如何获取具有多个类名的元素?

标签 php css dom xpath

我在检索具有四个类名的特定 li-tag 的节点值时遇到问题。唯一标识它的是类名“b-programm_ended”。

<?php
    $dom = new DOMDocument;
    $dom->loadHTMLFile('https://tv.mail.ru/channel/1296/65/');
    $xpath = new DOMXPath($dom);
    $classname = 'b-programm js-schedule_item js-remind_prnt b-programm_ended';
    $results = $xpath->query('//*[@class="'.$classname.'"]');
    echo $now = $results->item(0)->nodeValue;
?>

最佳答案

这不是您真正的问题。

不幸的是,您永远将无法找到具有 b-programm_ended 类的任何元素。我查看了 https://tv.mail.ru/channel/1296/65/ 的来源,但找不到任何 b-programm_ended 字符串。但是,我使用 Chrome 检查了 DOM,确实找到了 b-programm_ended 的一些实例。这意味着类属性是使用 jQuery 创建的,因此您的服务器端 PHP 解析将找不到这些标签。

但是,当我检查来自同一站点的 XHR 请求时,会从中提取一些 JSON 数据

https://tv.mail.ru/ext/admtv/?sch.favorite_event=1&sch.recommended_main=1&cfg.get=1&sch.main=1&sch.channel=1296

包含您可能正在寻找的数据,例如:

schedule: [{stop: "2015-04-26 05:15:00", name: "Белохвостые гиганты "Тэкомати"", genre_id: "142",…},…]
    0: {stop: "2015-04-26 05:15:00", name: "Белохвостые гиганты "Тэкомати"", genre_id: "142",…}
    episode_num: "6"
    episode_title: "402-я серия"
    genre_id: "142"
    id: "36239842"
    name: "Белохвостые гиганты "Тэкомати""
    start: "2015-04-26 04:50:00"
    stop: "2015-04-26 05:15:00"
    year: "2013"
    ...

我的建议是使用 JSON 解析器(PHP 中的 json_decode)并方便地从该数据结构中挑选出您要查找的信息。

关于php - 如何获取具有多个类名的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29875755/

相关文章:

php - PHP 函数 fwrite 中的 IF THEN 表达式

php - Try-Catch 未捕获自定义异常类型

php - 在 PHP 中重定向回上一页

javascript - 如何使用javascript取消http请求

javascript - 使用 JavaScript 将 _target ="blank"动态更改为 _target ="self"

javascript - 使用 CanvasJS 在图表中显示 Y 轴

css - 如何使用 Bootstrap 3 避免图像库中不同大小图像之间的空白

CSS:正文边框不会像中间 div 那样展开?

javascript - 未捕获的安全错误 : Failed to execute 'getImageData' on 'CanvasRenderingContext2D' :

javascript - 在页面上将 react 组件移动到彼此之前/之后(排序)