【发布时间】:2018-04-03 02:55:18
【问题描述】:
我试图从 HTML 页面中选择内容。问题是DOMDocument($html) 的结果在其“[documentElement]”节点中没有元素。然而,HTML 页面的所有文本(不包括 HTML 标记)都在 [textContent] 内。
这就是我制作DOMDocument 对象的方式:
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$html = file_get_contents("https://example.com");
$doc->loadHTML($html);
这是输出的对象:
DOMDocument Object (
[doctype]=> (object value omitted)
[implementation]=> (object value omitted)
[documentElement]=> (object value omitted)
[actualEncoding]=> utf-8
[encoding]=> utf-8
[xmlEncoding]=> utf-8
[standalone]=> 1
[xmlStandalone]=> 1
[version]=>
[xmlVersion]=>
[strictErrorChecking]=> 1
[documentURI]=>
[config]=>
[formatOutput]=>
[validateOnParse]=>
[resolveExternals]=>
[preserveWhiteSpace]=> 1
[recover]=>
[substituteEntities]=>
[nodeName]=> #document
[nodeValue]=>
[nodeType]=> 13
[parentNode]=>
[childNodes]=> (object value omitted)
[firstChild]=> (object value omitted)
[lastChild]=> (object value omitted)
[previousSibling]=>
[nextSibling]=>
[attributes]=>
[ownerDocument]=>
[namespaceURI]=>
[prefix]=>
[localName]=>
[baseURI]=>
[textContent]=> blah blah blah
这样我就不能遍历 HTML 的标签并选择特定的内容。甚至new DOMXpath($doc) 也不会返回有用的内容,我认为这是因为DOMXpath($doc) 取决于[documentElement] 对象的[documentElement] 节点。这是var_dump(new DOMXpath($doc));的输出
object(DOMXPath)#2 (1) { ["document"]=> string(22) "(object value omitted)" }
我尝试了 curl 和 file_get_contents 两种方法来获取 HTML 内容,并且确信 HTML 内容是正确的(我能够通过 print_r($html) 在 PHP 文件中复制 HTML 页面。另外,我已经在 StackOverflow 上阅读了几个答案,但无法解决问题。
【问题讨论】:
标签: php html dom xpath web-scraping