我正试图使用DOM来获取日期和时间以及房间(我实际上在我的脚本中得到了所有东西,但它得到了这两个我有麻烦)从以下一批HTML:
</td><td class="call">
<span>12549<br/></span><a href="http://www.bkstr.com/webapp/wcs/stores/servlet/booklookServlet?bookstore_id-1=584&term_id-1=201190&crn-1=12549" target="_blank">View Book Info</a>
</td><td>
<span id="ctl10_gv_sectionTable_ctl03_lblDays">F:1000AM - 1125AM<br />T:230PM - 355PM</span>
</td><td class="room">
<span id="ctl10_gv_sectionTable_ctl03_lblRoom">KUPF106<br />KUPF106</span>
</td><td class="status"><span id="ctl10_gv_sectionTable_ctl03_lblStatus" class="red">Closed</span></td><td class="max">20</td><td class="now">49</td><td class="instructor">
<a href="https://directory.njit.edu/PersDetails.aspx?persid=SCHOENKA" target="_blank">Schoenebeck Kar</a>
</td><td class="credits">3.00</td>
</tr><tr class="sectionRow">
<td class="section">
101<br />
这是我目前找到的天数
$tracker =0;
// DAYS AND TIMES
$number = 3;
$digit = "0";
while($tracker<$numSections){
$strNum = strval($number);
$zero = strval($digit);
$start = "ctl10_gv_sectionTable_ctl";
$end = "_lblDays";
$id = $start.$zero.$strNum.$end;
//$days = $html->find('span.$id');
$days=$html->getElementByTagName('span')->getElementById($id);
echo "Days : ";
echo $days[0] . '<br>';
$tracker++;
$number++;
if($number >9){
$digit = "1";
$number=0;
}
}
从HTML中可以看到,站点im解析的一些span (ctl10_gv_sectionTable_ctl03_lblRoom)具有非常独特的ID。由于我只发布了1节的HTML块,您没有看到的是,下一个类部分的代码是相同的,除了"ctl03"部分,这是我所关心的所有额外代码,只是为了没有人被它抛弃。
我试过几种不同的方法,但似乎不能得到的日子(即。"上午1000AM - 1125AM")或房间(即KUPF106)。其余的东西很容易获取,但这两个没有类标识符,甚至没有td标识符。我想我只需要知道如何使用我在$id作为我正在寻找的特定span id的值?如果有的话,有人能告诉我怎么做吗?
This:
$html->getElementByTagName('span')->getElementById($id);
没有意义。getElementByTagName
返回一个DOMList
,它没有getElementById
方法。
我认为你指的是$html->getElementById($id);
,但我不能确定,因为我不知道$html
是什么。
一旦有了元素,如果不需要遍历文本节点,就可以使用$element->textContent
获取文本值。
您是否考虑过使用DOMXPath
进行解析任务?
应该避免使用简单Html Dom,除非您使用的是Php版本<= 4。Php5中内置的Dom函数使用更可靠的libxml2库。
迭代html的正确方法是首先确定要迭代的行,然后编写xpath表达式来提取相对于该行的数据。
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DomXpath($dom);
foreach($xpath->query("//tr[@class='sectionRow']") as $row){
echo $xpath->query(".//span[contains(@id,'Days')]",$row)->item(0)->nodeValue."'n";
echo $xpath->query(".//span[contains(@id,'Room')]",$row)->item(0)->nodeValue."'n";
echo $xpath->query(".//span[contains(@id,'Status')]",$row)->item(0)->nodeValue."'n";
}