2012-04-02 86 views
0

我刮此页:
http://kat.ph/search/example/?field=seeders&sorder=desc使用PHP的DOM文档:: preserveWhiteSpace = false,并仍然得到空白

这样:

... 
curl_setopt($curl, CURLOPT_URL, $url); 
$header = array (
    'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
    'Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3', 
    'Accept-Encoding:gzip,deflate,sdch', 
    'Accept-Language:en-US,en;q=0.8', 
    'Cache-Control:max-age=0', 
    'Connection:keep-alive', 
    'Host:kat.ph', 
    'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.142 Safari/535.19', 
); 
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.142 Safari/535.19'); 
curl_setopt($curl, CURLOPT_HTTPHEADER, $header); 
curl_setopt($curl, CURLOPT_REFERER, 'http://kat.ph'); 
curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate,sdch'); 
curl_setopt($curl, CURLOPT_AUTOREFERER, true); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_TIMEOUT, 10); 

$html = curl_exec($curl); 
$dom = new DOMDocument; 
$dom->preserveWhiteSpace = FALSE; 
@$dom->loadHTML($html); 

只好模仿浏览器这工作,因此CURL

但我仍然得到DOMNodes类型#text其中只包含空白字符。

任何想法,为什么会发生这种情况,以及如何避免它?

回答

3

看起来像preserveWhiteSpace属性只是sets libxml2 XML_PARSE_NOBLANKS标志,这并不总是可靠的,因为this thread暗示。特别是,在不使用DTD的情况下解析,因为在这种情况下解析器在某些情况下(主要是如果它们是其他非文本元素的同胞)保留空的文本元素。

线程可能有点过时,但行为still exists as described

+0

非常好!感谢您的洞察力,我将在未来记住这一点。 – flu 2012-05-24 09:28:42

+5

其中两个链接已经死亡。 – ow3n 2013-10-09 03:50:03