使用Simple HTML DOM循环遍历表

时间:2012-11-18 22:38:43

标签: php dom web-scraping html-table simple-html-dom

我正在使用Simple HTML DOM从HTML文档中提取数据,我还有一些问题需要帮助。

  1. 在以if ($td->find('a'))开头的行上,我想分别提取href和锚节点的内容,并将它们放在单独的变量中。但是代码不起作用(参见下面代码中的回声输出)。

    最好的方法是什么?请注意,我的目的是稍后从信息中创建XML文档,因此我需要以正确的顺序提供信息。

  2. 链接指向包含有关不同车辆的详细信息的页面(例如“最大速度”,“价格”等),我也想提取并放入单独的变量中。如何在这些页面上获取数据?

    <?php
    include 'simple_html_dom.php';
    
    $html = new simple_html_dom();
    $html = file_get_html('http://www.example.com/foo.html');
    
    $items = array();
    
    foreach ($html->find('table') as $table) {
        foreach ($table->find('tr') as $tr) {
    
            foreach ($tr->find('td') as $td) {
    
                if ($td->find('a')) {
                    $link = $td->find('a.href');
                    echo $link;  // empty
    
                    $text = $td->find('a.text');
                    echo $text; // Array
                }
                else {
                    echo 'Name: ' . $td;
                }
            }
        }
    }
    
  3. HTML文档如下所示:

    <div>
        <table>
            <tr>
                <td>
                    <a href="car1.html" target="_blank">Car 1</a>
                </td>
                <td>
                    Porsche
                </td>
            </tr>
            <tr>
                <td>
                    <a href="car2.html" target="_blank">Car 2</a>
                </td>
                <td>
                    Chrysler
                </td>
            </tr>
            ... and so on...
    

2 个答案:

答案 0 :(得分:3)

使用$td->find('a', 0)->href$td->find('a', 0)->innertext访问第一种情况下的元素属性,使用第二种情况中的内容。此外,如果可能找到多个锚点,请使用0作为安全防护来始终获得第一个。

答案 1 :(得分:2)

'a.href'是查找CSS类href的锚标记的选择器。不要获取锚标记的href属性。你可以这样做:

$link = $td->find('a', 0);
$href = $link->href;