使用 XML-解析器解析 html 文档
Parsing an html document using an XML-parser
我可以使用 XML 解析器解析 HTML 文件吗?
为什么我不能(')这样做。我知道XML是用来存储数据的,HTML是用来显示数据的。但在句法上它们几乎相同。
预期用途是制作一个 HTML 解析器,它是网络爬虫应用程序的一部分
您可以尝试使用 XML 解析器解析 HTML 文件,但很可能会失败。原因是 HTML 文档可以具有 XML 解析器不理解的以下 HTML 特征。
- 没有结束标签并且不使用XML所谓的“自闭标签语法”的元素;例如,
<br>
、<meta>
、<link>
、和 <img>
(也称为 void 元素)
- 不需要结束标签的元素;例如,
<p>
<dt>
<li>
(他们的结尾标签可以隐含)
- 可以包含未转义标记“
<
”字符的元素;例如,style、textarea、title、script; <script> if (a < b) … </script>
、<title>Using the "<" operator</title>
- 具有 未加引号 值的属性;例如,
<meta
charset=utf-8
>
- 空的属性,根本没有给出单独的值;例如,
<input
disabled
>
XML 解析器将无法解析任何使用这些功能的 HTML 文档。
HTML 另一方面,无论文档包含什么内容,解析器基本上都不会失败。
综上所述,还有开发一种新型 XML 解析的工作:所谓的 XML5 解析,能够甚至在 XML 文档中处理 empty/unquoted attributes 属性之类的东西。有个draft XML5 specification, as well as an XML5 parser, xml5ever.
The intended use is to make an HTML parser, that is part of a web
crawler application
如果您要创建网络爬虫应用程序,您绝对应该使用 HTML 解析器 — 理想情况下,HTML 符合 parsing requirements in the HTML standard 的解析器。
如今,许多(甚至大多数)语言都有这样符合要求的 HTML 解析器;例如:
- parse5(节点.js/JavaScript)
- html5lib (python)
- html5ever(生锈)
- validator.nu html5 parser (java)
- gumbo (c, with bindings for ruby, objective c, c++, per, php, c#, perl, lua, D, julia…)
syntactically they are almost identical
电脑很挑剔。 "Almost identical" 不够好。 HTML 允许 XML 不允许的事情,因此 XML 解析器将拒绝(很多,但不是全部)HTML 文档。
此外,还有一种不同的质量文化。对于 HTML,解析器的文化是 "try to do something with the input if you possibly can"。 XML 的文化是 "if it's faulty, send it back for repair or replacement"。
我可以使用 XML 解析器解析 HTML 文件吗?
为什么我不能(')这样做。我知道XML是用来存储数据的,HTML是用来显示数据的。但在句法上它们几乎相同。
预期用途是制作一个 HTML 解析器,它是网络爬虫应用程序的一部分
您可以尝试使用 XML 解析器解析 HTML 文件,但很可能会失败。原因是 HTML 文档可以具有 XML 解析器不理解的以下 HTML 特征。
- 没有结束标签并且不使用XML所谓的“自闭标签语法”的元素;例如,
<br>
、<meta>
、<link>
、和<img>
(也称为 void 元素) - 不需要结束标签的元素;例如,
<p>
<dt>
<li>
(他们的结尾标签可以隐含) - 可以包含未转义标记“
<
”字符的元素;例如,style、textarea、title、script;<script> if (a < b) … </script>
、<title>Using the "<" operator</title>
- 具有 未加引号 值的属性;例如,
<meta
charset=utf-8
>
- 空的属性,根本没有给出单独的值;例如,
<input
disabled
>
XML 解析器将无法解析任何使用这些功能的 HTML 文档。
HTML 另一方面,无论文档包含什么内容,解析器基本上都不会失败。
综上所述,还有开发一种新型 XML 解析的工作:所谓的 XML5 解析,能够甚至在 XML 文档中处理 empty/unquoted attributes 属性之类的东西。有个draft XML5 specification, as well as an XML5 parser, xml5ever.
The intended use is to make an HTML parser, that is part of a web crawler application
如果您要创建网络爬虫应用程序,您绝对应该使用 HTML 解析器 — 理想情况下,HTML 符合 parsing requirements in the HTML standard 的解析器。
如今,许多(甚至大多数)语言都有这样符合要求的 HTML 解析器;例如:
- parse5(节点.js/JavaScript)
- html5lib (python)
- html5ever(生锈)
- validator.nu html5 parser (java)
- gumbo (c, with bindings for ruby, objective c, c++, per, php, c#, perl, lua, D, julia…)
syntactically they are almost identical
电脑很挑剔。 "Almost identical" 不够好。 HTML 允许 XML 不允许的事情,因此 XML 解析器将拒绝(很多,但不是全部)HTML 文档。
此外,还有一种不同的质量文化。对于 HTML,解析器的文化是 "try to do something with the input if you possibly can"。 XML 的文化是 "if it's faulty, send it back for repair or replacement"。