【发布时间】:2018-06-03 13:24:40
【问题描述】:
我用下面的代码解决了我最初的问题。我现在需要学习如何将返回的数据限制为前 5 行。如何限制 foreach 循环?
我正在从site 中抓取数据 - 我能够遍历 DOM 以获取我想要的表“LAST 1 MONTH (11/20/2017-12/19/2017)”,这是第三个或“2”。但是,我不能完全正确地得到输出。我需要将它包装在一个表中,每一行都包含代码中指定的 td。这是我正在使用的代码,但成功率有限:
<?php
$html = file_get_contents('https://ninjatrader.isystems.com/Systems/TopStrategies');
$doc = new DOMDocument();
@$doc->loadhtml($html);
$xpath = new DOMXPath($doc);
echo "<table>";
foreach($xpath->query('//table')->item(2)->getElementsByTagName('tr') as $rows) {
$cells = $rows->getElementsByTagName('td');
echo "<tr>
<td>" . $cells->item(1)->textContent . "</td>
<td>" . $cells->item(2)->textContent . "</td>
<td>" . $cells->item(3)->textContent . "</td>
<td>" . $cells->item(5)->textContent . "</td>
</tr>";
}
echo "</table>";
?>
好的,我已经用上面的方法解决了我的问题。有没有更好的方法来做到这一点?
【问题讨论】:
-
@ 抑制错误。因此,如果 loadhtml 有任何问题,它不会将它们推送到浏览器(如果您正在执行命令行操作,也不会推送到屏幕)——请参阅 stackoverflow.com/questions/2002610/…
-
感谢@DragonYen,所以这是一种简化的方法-> libxml_use_internal_errors(TRUE); ?
标签: php web-scraping