2

我正在使用 Simple HTML DOM 从 HTML 文档中提取数据,并且有几个问题需要帮助。

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

    做这个的最好方式是什么?请注意,我的目的是稍后根据这些信息创建一个 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;
                }
            }
        }
    }
    

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...
4

2 回答 2

4

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

于 2012-11-18T22:43:16.177 回答
2

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

$link = $td->find('a', 0);
$href = $link->href;
于 2012-11-18T22:43:40.503 回答