我有一个网站内容,我想用Simple HTML DOM Parser解析,就像这样:
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
$searchResults = $html->find('.search-results');
不为空,我已经调试过了。如果我使用此代码进行表格查找,我会得到相同的结果:
function combineDateWithTime(d, t)
{
return new Date(
d.getFullYear(),
d.getMonth(),
d.getDate(),
t.getHours(),
t.getMinutes(),
t.getSeconds(),
t.getMilliseconds()
);
}
可能是什么问题?
答案 0 :(得分:2)
您的脚本中存在两个问题:
首先,你的搜索模式是错误的(由于拼写错误?):你忘了关闭方括号。这一行:
$searchResults = $html->find('table[@class=search-results]');
# ↑
必须是:
->find()
然后,->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()
{{1}}的第二个参数表示:仅返回第一个匹配的节点(键索引= 0)。