找到这个http://simplehtmldom.sourceforge.net/,但它无法正常工作
extracting this page http://php.net/manual/en/function.curl-setopt.php
and parse it to plain html, it failed and returned a partial html page
这就是我想要做的, 转到html页面并获取各个组件(层次结构中所有div和p的内容) 我喜欢simplehtmldom的功能,需要任何这样的解析器,它在所有代码(最好和最差)都很好。
答案 0 :(得分:5)
在一般情况下,我经常使用DOMDocument::loadHTML
,这种方法效果不算太差 - 而且我喜欢在将文档作为DOM加载Xpath
时查询文档。
不幸的是,我认为,在某些情况下,如果HTML页面确实形成错误,可能会出现一些解析问题... 当你开始理解尊重网络标准是一个好主意时。 .. 的
答案 1 :(得分:0)
以Pascal MARTIN的回应为基础......
我使用CURL和XPATH的组合。下面是我在其中一个课程中使用的函数。
protected function _get_xpath($url) {
$refferer='http://www.whatever.com/';
$useragent='Googlebot/2.1 (http://www.googlebot.com/bot.html)';
// create curl resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt ($ch, CURLOPT_REFERER, $refferer);
curl_setopt($ch, CURLOPT_URL, $url);
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// $output contains the output string
$output = curl_exec($ch);
//echo htmlentities($output);
if(curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
else {
$dom = new DOMDocument();
@$dom->loadHTML($output);
$this->xpath = new DOMXPath($dom);
$this->html = $output;
}
// close curl resource to free up system resources
curl_close($ch);
}
然后,您可以使用evaluate解析文档结构并提取所需信息
$resultDom = $this->xpath->evaluate("//span[@id='headerResults']/strong");
$this->results = $resultDom->item(0)->nodeValue;
答案 2 :(得分:0)
我找到了最适合我用的地方 - http://querypath.org/