【问题标题】:Using PHP's DOMDocument::preserveWhiteSpace = false and still getting whitespace使用 PHP 的 DOMDocument::preserveWhiteSpace = false 仍然得到空白
【发布时间】:2012-04-02 07:02:14
【问题描述】:

我正在抓取这个页面:
http://kat.ph/search/example/?field=seeders&sorder=desc

这样:

...
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

但是我仍然得到#text 类型的DOMNodes,它只包含空白字符。

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

【问题讨论】:

    标签: php screen-scraping web-scraping domdocument


    【解决方案1】:

    看起来preserveWhiteSpace 属性只是 sets libxml2 XML_PARSE_NOBLANKS 标志,这并不总是像 this thread 建议的那样可靠。具体来说,在这种情况下,在没有 DTD 的情况下进行解析时,解析器在某些情况下会保留空文本元素(主要是当它们是其他非文本元素的同级元素时)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 2020-10-13
      相关资源
      最近更新 更多