如何使用简单 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)。
我有一个网站内容,我想用 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)。