以下是我的代码:
$xpath = new DOMXPath($doc);
// Start from the root element
$query = '//div[contains(@class, "hudpagepad")]/div/ul/li/a';
$nodeList = @$xpath->query($query);
// The size is 104
$size = $nodeList->length;
for ( $i = 1; $i <= $size; $i++ ) {
$node = $nodeList->item($i-1);
$url = $node->getAttribute("href");
$error = scrapeURL($url);
}
function scrapeURL($url) {
$cfm = new DOMDocument();
$cfm->loadHTMLFile($url);
$cfmpath = new DOMXPath($cfm);
$pointer = $cfm->getElementById('content-area');
$filter = 'table/tr';
// The problem lies here
$state = $pointer->firstChild->nextSibling->nextSibling->nodeValue;
$nodeList = $cfmpath->query($filter, $pointer);
}
基本上,这会遍历一个链接列表,并使用scrapeURL方法擦除每个链接。
我不知道这里的问题,但随机我得到一个非对象类型错误试图获取$pointer
,有时它通过没有任何错误,值是正确的。
有人知道这里的问题吗?我猜测问题出现的时候是页面没有正确加载?
答案 0 :(得分:0)
我在这里找到了答案的想法:
http://sharovatov.wordpress.com/2009/11/01/php-loadhtmlfile-and-a-html-file-without-doctype/
最好使用'手动'查询而不是使用getElementById因为如果要加载的文档的DOCTYPE格式不正确,它会中断。
所以请改用:
$cfmpath->query("//*[@id='content-area']")
或创建方法
function getElementById($id) {
global $dom;
$xpath = new DOMXPath($dom);
return $xpath->query("//*[@id='$id']")->item(0);
}
感谢那些试图帮助的人!