【发布时间】:2013-03-25 04:33:21
【问题描述】:
我正在使用 SIMPLE_HTML_DOM 测试解析器,并在解析时 从该 URL 返回的 HTML DOM:HERE
它没有找到 H1 元素... 我尝试成功返回所有 div。
我正在使用一个简单的请求来诊断这个问题:
foreach($html->find('H1') as $value) { echo "<br />F: ".htmlspecialchars($value); }
在查看源代码时,我意识到:
-
h1 是大写 -> H1 - 但 SIMPLE_HTML... 正在处理:
//PaperG - If lowercase is set, do a case insensitive test of the value of the selector. if ($lowercase) { $check = $this->match($exp, strtolower($val), strtolower($nodeKeyValue)); } else { $check = $this->match($exp, $val, $nodeKeyValue); } if (is_object($debugObject)) {$debugObject->debugLog(2, "after match: " . ($check ? "true" : "false"));}
任何机构都可以帮助我了解这里发生了什么吗?
【问题讨论】:
-
注意区别:
H1 != h1。并且您可以打印来自$html的所有结果,以防丢失。 -
你的浏览器 DOM 说什么?您链接到的页面包含无效的 HTML,因此 PHP 的解析器可能会因错误而窒息。
-
H1 不是我知道的 h1,但是简单的 html dom 解析器正在通过降低输入标签和匹配标签的大小写来处理它......(经过测试)。浏览器上显示的 dom 正在查找包含文章标题的 h1 标记(页面上只有一个) - 在页面源上搜索 class=text20b 你会找到它。我回显 $html 和 h1 在那里!?这很令人困惑......
-
在 URl 中,他们使用的是 H1 。这超出了标准的 AFAIK,可能会导致问题。
-
尝试下载页面并将 H1 更改为 h1 然后解析,它应该可以工作。你的代码看起来不错:)
标签: php parsing web-crawler simple-html-dom