提问人:Madara's Ghost 提问时间:7/19/2012 最后编辑:bouteillebleuMadara's Ghost 更新时间:12/31/2020 访问量:270
如何在 PHP 中处理无效的 HTML?
How do you process invalid HTML in PHP?
问:
我看过这个问题,非常好,内容丰富。但是,它不处理相当常见的情况。
假设我需要抓取大量网站(甚至同一域中的页面),但该网站的作者对他的代码不够关心,并且有一些“有点工作”的严重畸形代码。我需要从该网站获取信息。
在这种情况下,我该怎么做?理想情况下,不要去 í͞ń̡͢͡s̶̢̛á̢̕͘ń̵͢҉e̶̸̢̛.
可能吗?我必须恢复到正则表达式吗?
答:
4赞
RobIII
7/19/2012
#1
你需要一个 DOM 解析器。Php 有一个。然后有一些 替代方案(还有更多......只需谷歌搜索他们)。如果需要,您甚至可以运行“乱码 HTML”trhu HTML Purifier。
评论
0赞
Madara's Ghost
7/19/2012
是吗!但我们正在谈论的是破碎的 HTML。这不是有效的 HTML。
6赞
RobIII
7/19/2012
@Truth 所以呢?“破损”(畸形、无效等......HTML 同样可解析...也许 DOM 树并不像作者所希望的那样,但您可以完全访问所需的所有必需节点/属性。
0赞
Baptiste Placé
7/19/2012
#2
我不知道您是如何抓取网站的,但是使用RegExp将允许您在抓取代码中添加许多条件。这可能需要一些时间,具体取决于封装的数量和您的正则表达式技能。
您也可以在网站上使用 Tidy,但这会导致奇怪的结果以及 IMO。
评论
0赞
RobIII
7/19/2012
看看我一直以来最喜欢的 StackOverflow 关于使用正则表达式“解析”HTML 的答案。然后阅读 解析 Html 克苏鲁之道,了解一些细微差别。对我来说,不使用正则表达式的最大原因是正则表达式本身很快就会变得“不可读”。
0赞
Baptiste Placé
7/19/2012
好吧,我从来没有说过你可以用正则表达式解析 HTML,这是无稽之谈。显然,使用 RegExp 可以很好地完成抓取(即提取数据)。感谢您的阅读!
0赞
RobIII
7/19/2012
要提取数据(并正确地提取数据),您必须解析文档并使用 DOM,而不是依赖一大堆字符串。话虽如此;是的,确实,您可以使用正则表达式。这就是为什么我添加了 Jeff Atwoods 的文章 ;-)
0赞
Baptiste Placé
7/20/2012
也许有一天我会进入 DOM 解析,确实它既有用又简单,而且您不必弄乱字符串(直到您必须解析文本节点)。但这并不像我每天早上都在解析,而且我从来没有失败过使用 RegExp 提取数据。更重要的是,我真的很喜欢用RegExp训练自己,这就像一把瑞士军刀,可以完成许多任务。
0赞
anotherdave
7/19/2012
#3
它必须是PHP吗?Python 有一个很棒的库,叫做 Beautiful Soup(“你没有写那个糟糕的页面。你只是想从中获取一些数据“)。根据我的经验,我非常推荐它,以至于我会说,如果你有选择的话,写一个快速的 Python 脚本,将你的节点解析成一个干净的文件,你的 PHP 可以拾取它。
(知道PHP在标题中,这并不能直接回答你的问题。如果您没有(或不喜欢)Python 的选择,我们深表歉意,只是想提出一个不错的选择。
评论
strip_tags