我正在尝试使用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中可以看出,网站即时解析对于其某些跨度(ctl10_gv_sectionTable_ctl03_lblRoom)具有非常独特的ID。由于我只发布了1个部分的HTML块,你没看到的是下一个类部分的代码是相同的,除了“ctl03”部分,这是我所有的额外代码所处理的,所以没有一个被它抛弃了。
我尝试了几种不同的方法,但似乎无法获得日子(即“上午10点至11点25分”)或房间(即KUPF106)。其余的东西很容易抓住,但这两个没有类标识符甚至是td标识符。我想我只需要知道如何使用我在$ id中的值作为我正在寻找的特定跨度ID?如果是这样,有人可以告诉我该怎么做吗?
答案 0 :(得分:2)
这:
$html->getElementByTagName('span')->getElementById($id);
毫无意义。 getElementByTagName
返回DOMList
,其中没有getElementById
方法。
我认为你的意思是$html->getElementById($id);
,但我无法确定,因为我不知道$html
是什么。
获得元素后,如果不需要在文本节点之间移动,则可以使用$element->textContent
获取文本值。
您是否考虑过使用DOMXPath
进行解析任务?它可能很多更容易和更清晰。
答案 1 :(得分:0)
除非你使用的是Php版本&lt; = 4,否则应该避免使用简单的Html Dom.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";
}