Php 使用Xpath解析网站中的html

Php 使用Xpath解析网站中的html,php,html,xpath,domdocument,Php,Html,Xpath,Domdocument,目前,我正在尝试使用xpath解析网站中的html页面 我需要得到以下格式的结果: 日期 节目时间:节目名称 例如: 10月18日 凌晨1:00:Ye Hai Mohabbatein 我使用下面的代码来获得这个。但它已经工作了两次了 <?php $dat="Oct 18"; $ch = curl_init('http://www.starplus.in/schedule.aspx'); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozi

目前,我正在尝试使用xpath解析网站中的html页面

我需要得到以下格式的结果:

日期

节目时间:节目名称

例如:

10月18日

凌晨1:00:Ye Hai Mohabbatein

我使用下面的代码来获得这个。但它已经工作了两次了

<?php

$dat="Oct 18";
$ch = curl_init('http://www.starplus.in/schedule.aspx');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$page = curl_exec($ch);
$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($page);
libxml_clear_errors();
$xpath = new DOMXPath($dom);
$n=0;
$shows = array();
$tables1 = $xpath->query("//td[@class='bdr_R_dot']");
$tables2 = $xpath->query("//div[@class='sech_div_bg']/table");
foreach ($tables1 as $table1) {
    $date = $xpath->query('./span[2]', $table1)->item(0)->nodeValue;  
    if($date==$dat){
        echo "<h1>$date</h1> <br>";
        foreach ($tables2 as $table2) {
            $time_slot = $xpath->query('./tr[1]/td/span', $table2)->item(0)->nodeValue;
            $show_name = $xpath->query('./tr[3]/td/span', $table2)->item(0)->nodeValue;
            $shows[] = array('time_slot' => $time_slot, 'show_name' => $show_name);      
            echo "$time_slot - $show_name <br/>";
        }
    }
}   

?>
loadHTML($page);
libxml_clear_errors();
$xpath=newdomxpath($dom);
$n=0;
$shows=array();
$tables1=$xpath->query(//td[@class='bdr\u R\u dot']);
$tables2=$xpath->query(“//div[@class='sech\u div\u bg']/table”);
foreach($table1为$table1){
$date=$xpath->query('./span[2]',$table1)->项(0)->节点值;
如果($date==$dat){
回显“$date
”; foreach($table2为$table2){ $time_slot=$xpath->query('./tr[1]/td/span',$table2)->item(0)->nodeValue; $show_name=$xpath->query('./tr[3]/td/span',$table2)->item(0)->nodeValue; $shows[]=array('time\u slot'=>$time\u slot,'show\u name'=>$show\u name); echo“$time_slot-$show_name
”; } } } ?>

我做了很多事情,但是我的代码执行了2次,而整个数据打印了两次。如果有人能在这期节目中帮助我,我将不胜感激。

是的,你可以利用这个日期来获得当天的节目。您可以将其用作特定行表的指针

首先确定它将落在哪一行,然后获取这些行。例如:

$dat = "Oct 18";
$ch = curl_init('http://www.starplus.in/schedule.aspx');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$page = curl_exec($ch);
$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($page);
libxml_clear_errors();
$xpath = new DOMXPath($dom);

$shows = array();
$node_list = $xpath->query("
    //td[@class='bdr_R_dot']/span[text() = '$dat']
    /parent::td/following-sibling::td
    /table/tr/td[3]/div/ul/li
");

echo $dat . '<br/><br/>';
foreach ($node_list as $el) {
    $time_slot = $xpath->query('./div/table/tr[1]/td/span', $el)->item(0)->nodeValue;
    $show_name = $xpath->query('./div/table/tr[3]/td/span', $el)->item(0)->nodeValue;

    echo "$time_slot : $show_name <br/>";
}
$dat=“10月18日”;
$ch=curl\u init('http://www.starplus.in/schedule.aspx');
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0(Windows;U;windowsnt 5.1;en-US;rv:1.8.1.13)Gecko/20080311 Firefox/2.0.0.13');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$page=curl\u exec($ch);
$dom=新的DOMDocument;
libxml\u使用\u内部错误(true);
$dom->loadHTML($page);
libxml_clear_errors();
$xpath=newdomxpath($dom);
$shows=array();
$node_list=$xpath->query(“
//td[@class='bdr\u R\u dot']/span[text()='$dat']
/父::td/以下同级::td
/表/tr/td[3]/div/ul/li
");
回显$dat。”

; foreach($node_列表为$el){ $time_slot=$xpath->query('./div/table/tr[1]/td/span',$el)->项(0)->节点值; $show_name=$xpath->query('./div/table/tr[3]/td/span',$el)->项(0)->节点值; echo“$time\u slot:$show\u name
”; }

“但它工作了两次。”你能澄清一下吗?输出在凌晨1:00到12:30之间打印了两次。你能显示一段XML吗?谢谢你,这对我帮助很大。