【问题标题】:How to get element with multiple class names?如何获取具有多个类名的元素?
【发布时间】:2015-07-04 17:25:58
【问题描述】:

我在检索具有四个类名的特定 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;
?>

【问题讨论】:

标签: php css dom xpath


【解决方案1】:

这不是你真正的问题。

不幸的是,您永远无法找到任何具有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)并方便地从该数据结构中挑选出您正在寻找的信息。

【讨论】:

    【解决方案2】:
    <?php
    $dom = new DOMDocument;
    $dom->loadHTMLFile('https://tv.mail.ru/channel/1296/65/');
    $xpath = new DOMXPath($dom);
    $classname = 'b-programm_ended';
    $results = $xpath->query('//*[@class="'.$classname.'"]');
    echo $now = $results->item(0)->nodeValue;
    ?>
    

    【讨论】:

      【解决方案3】:

      由于 b 程序可以是所需元素的唯一选择器,请尝试以下代码

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

      【讨论】:

      • 请求链接的编码是什么?我认为它需要一些工作。
      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多