如何使用简单 HTML DOM 解析器解析 HTML

How can I parse HTML with Simple HTML DOM Parser

我有一个网站内容,我想用 Simple HTML DOM 解析器来解析,就像这样:

...
<div id="page-content">
   <div id="search-results-main" class="wide">
      <table class="search-results">
         <thead>...</thead>
           <tbody>
              <tr id="ad-123123">
                 <td class="thumbnail">...</td>
              </tr>
              ...
           </tbody>
      </table>
   </div>
</div>
...

这是我现在的代码:

include('./simple_html_dom.php');

$html = file_get_html('http://www.domain.com/subsite');
$searchResults = $html->find('table[@class=search-results'); 

foreach($searchResults->find('tr[@id^=ad-]') as $tr) {
...
}

问题是我现在收到这个错误:

mod_fcgid: stderr: PHP Fatal error:  Call to a member function find() on a non-object in /data/domains/mydomain/web/webroot/path/to/script.php on line 31

$html不为空,我已经调试过了。如果我将此代码用于 table 结果,我会得到相同的结果:

$searchResults = $html->find('.search-results'); 

可能是什么问题?

你的脚本有两个问题:

首先,您的搜索模式有误(打字错误?):您忘记关闭方括号。这一行:

$searchResults = $html->find('table[@class=search-results'); 

必须是:

$searchResults = $html->find('table[@class=search-results]'); 
#                                                        ↑

然后,->find() return是一个对象数组,所以你必须这样修改你的下一个->find()

foreach( $searchResults[0]->find( 'tr[@id^=ad-]' ) as $tr )
#                      ↑↑↑

或者,您可以使用以下语法:

$searchResult = $html->find( 'table[@class=search-results]', 0 ); 
foreach( $searchResult->find( 'tr[@id^=ad-]' ) as $tr )

->find()的第二个参数表示:return只有第一个匹配的节点(键索引=0)。