【问题标题】:How can I parse html elements in php? [closed]如何在 php 中解析 html 元素? [关闭]
【发布时间】:2015-04-12 11:44:09
【问题描述】:

我需要从 php 中的 html 文件中获取几个 html 元素的内容。
元素是:

  • 标题
  • 元关键字
  • 元描述
  • h1


页面上可能有两次、三次、...的标题,我需要所有出现 => $array_of_titles
其他标签也一样。
我需要收集这些数据以检查页面上标签的重复性。

我已经尝试过:

  • DOMDOCUMENT + DOMXPATH => 仅适用于格式良好的 html => 在现实世界中无法使用,有太多无法编写有效 html 的 mof*s
  • 简单的 Html DOM 解析器 - 失败,这个库充满了错误

我能做什么?它看起来真的是微不足道的问题,但是......

【问题讨论】:

  • 用正则表达式发疯:)
  • @dan08 不好的做法是使用正则表达式
  • 向我们展示您的 DOM 测试,我们或许可以帮助您。
  • 它适用于我的测试 DOM,但它应该适用于每个 DOM:/ 我没有任何输入规范,我只是通过站点地图并一一解析 html 页面。 DOMDocument 适用于我的测试用例,但如果您忘记了 html " 或 / 在某个其他标签的结尾处的某个位置,则 domdocument 失败
  • @greg_diesel 我是如何使用 DomDocument 的,只在格式良好的 html stackoverflow.com/questions/28263929/… 上工作

标签: php dom html-parsing


【解决方案1】:

我知道有几个解析器可以处理无效的 HTML:

  1. PHP Simple HTML DOM
  2. Ganon

正如其他人所说,正则表达式绝对不是要走的路。保护你的头发和理智,不要走那条路。

【讨论】:

  • 我在我的问题中提到了 PHP Simple Dom - 不适用于我的问题 - 有未解决的错误,但我会尝试 Ganon
  • 你也可以试试phpQuery。我不确定它对无效 HTML 的处理效果如何,但我已经在之前的几个项目中使用过它,没有任何问题。 github.com/soloproyectos/phpquery
  • 我试过 phpQuery,但我有这个问题:include_once("phpQuery-onefile.php"); $pq = phpQuery::newDocumentFile($file_url); print var_dump($pq->find("h1")->text()); Find 给了我一个字符串,其值由空格分隔,这不是很聪明,我可以用空格来爆炸它,但是你知道当元素内容是空格时会发生什么 => 我需要在某个数组中找到 find 的输出,我认为这可能是不可能的,或者是吗?
  • 对不起,我用了另一个 phpQuery 我用的是 google 的:code.google.com/p/phpquery 我也会试试你的
  • 他们是同一个项目。不过,github 版本可能会更新一些;我不知道。至于使用find,它应该返回一个节点列表。不要只在之后使用text,而是遍历列表。
猜你喜欢
  • 1970-01-01
  • 2015-02-22
  • 2014-01-10
  • 2023-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多