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

时间:2015-04-26 09:12:05

标签: php css dom xpath

我无法检索具有四个类名的特定li-tag的nodevalue。它是唯一标识它的类名“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;
?>

3 个答案:

答案 0 :(得分: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"
    ...

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

答案 1 :(得分:0)

<?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;
?>

答案 2 :(得分:0)

由于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;
?>