复杂(对我来说)页面上的DOM Parse表

时间:2015-11-20 18:25:47

标签: php html parsing dom

我花了几个小时阅读堆栈溢出并尝试从某个网页获取数据但没有成功。 你可以帮帮我吗?我没有想法了。

这是html: html

我尝试了很多例子。我认为最后一个是最简单的;并且仍然不知道该怎么做。

include 'simple_html_dom.php';

//new dom object
$dom = new DOMDocument();
$html = $dom->loadHTMLFile($url); 
$dom->preserveWhiteSpace = false; 

$tables = $dom->getElementsByTagName('table'); 

$rows = $tables->item(0)->getElementsByTagName('tr');
    foreach ($rows as $row)
    {
        /*** get each column by tag name ***/
        $cols = $row->getElementsByTagName('td');
        /*** echo the values ***/
        echo $cols->item(0)->nodeValue.'<br />';
        echo $cols->item(1)->nodeValue.'<br />';
        echo $cols->item(2)->nodeValue;
        echo '<hr />';

    }

我得到了这个:

  

在非对象上调用成员函数getElementsByTagName()   因为$ tables是空的。

我需要在这个屏幕截图中只获得两个位置:

enter image description here

1 个答案:

答案 0 :(得分:0)

也许这会有所帮助:

$dom = new DOMDocument();
$html = $dom->loadHTMLFile('http://www.m.rozkladzik.pl/poznan/wyszukiwarka_polaczen.html?from=Szymanowskiego%7Cb%7C105&to=Rybaki%7Cb%7C90&profile=opt&maxWalkChange=400&minChangeTime=2&currTime=1');
$dom->preserveWhiteSpace = false;

$finder = new DomXPath($dom);
$routes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' route_row ')]");

for ($i = 0; $i < 2; $i++) {
    $times[] = $routes->item($i);
}

$ times现在是一个包含两个DOMElement元素的数组,这是结果的前两行。