30 题: 你如何在PHP中解析和处理HTML / XML?

在...创建的问题 Mon, Apr 15, 2019 12:00 AM

如何解析HTML /XML并从中提取信息?

    
2030
30答案                              30 跨度>                         

原生XML扩展

我更喜欢使用原生XML扩展之一,因为它们捆绑在一起PHP,通常比所有第三方库更快,并且在标记上给我所需的所有控制权。

DOM

  

DOM扩展允许您使用PHP 5通过DOM API操作XML文档。它是W3C的文档对象模型核心级别3的实现,这是一个平台和语言中立的接口,允许程序和脚本动态访问和更新文档的内容,结构和样式。

DOM能够解析和修改现实世界(破碎)的HTML,它可以执行 XPath查询。它基于 libxml

使用DOM获得高效需要一些时间,但这个时间非常值得IMO。由于DOM是与语言无关的接口,因此您可以找到多种语言的实现,因此如果您需要更改编程语言,那么您很可能已经知道如何使用该语言的DOM API。

基本用法示例可在抓取A元素的href属性和一般概念概述可以在 php中的DOMDocument

如何使用DOM扩展已在StackOverflow上广泛讨论,因此,如果您选择使用它,您可以确定您遇到的大多数问题都可以通过搜索/浏览Stack Overflow来解决。

XMLReader

  

XMLReader扩展是XML拉取解析器。读取器在文档流上作为光标前进,并在途中停在每个节点上。

与DOM一样,XMLReader基于libxml。我不知道如何触发HTML Parser模块,因此使用XMLReader解析损坏的HTML的可能性要小于使用DOM的可靠性,您可以明确告诉它使用libxml的HTML Parser模块。

可以在获取基本用法示例来自h1标签的所有值使用php

XML Parser

  

此扩展允许您创建XML解析器,然后为不同的XML事件定义处理程序。每个XML解析器还有一些您可以调整的参数。

XML Parser库也基于libxml,并实现了 SAX 样式的XML推送解析器。它可能是比DOM或SimpleXML更好的内存管理选择,但是比XMLReader实现的pull解析器更难以使用。

SimpleXml

  

SimpleXML扩展提供了一个非常简单且易于使用的工具集,用于将XML转换为可以使用普通属性选择器和数组迭代器处理的对象。

当您知道HTML是有效的XHTML时,SimpleXML是一个选项。如果你需要解析破碎的HTML,甚至不要考虑SimpleXml,因为它会阻塞。

基本用法示例可在一个简单的CRUD节点程序和xml文件的节点值,并且有一个 PHP手册中的许多其他示例


第三方库(基于libxml)

如果您更喜欢使用第三方库,我建议使用实际使用 DOM / libxml ,而不是字符串解析。

FluentDom - 回购

  

FluentDOM为PHP中的DOMDocument提供类似jQuery的流畅XML接口。选择器是用XPath或CSS编写的(使用CSS到XPath转换器)。当前版本扩展了DOM实现标准接口并添加了DOM Living Standard的功能。 FluentDOM可以加载JSON,CSV,JsonML,RabbitFish等格式。可以通过Composer安装。

HtmlPageDom

  

Wa72 \HtmlPageDom`是一个易于操作HTML的PHP​​库   使用它的文档需要来自Symfony2的DomCrawler   用于遍历的组件   DOM树并通过添加操作DOM的方法来扩展它   HTML文档树。

phpQuery (多年未更新)

  

phpQuery是一个服务器端,可链接,CSS3选择器驱动的文档对象模型(DOM)API,基于用PHP5编写的jQuery JavaScript库,并提供额外的命令行界面(CLI)。

另见: https://github.com/electrolinux/phpquery

Zend_Dom

  

Zend_Dom提供了处理DOM文档和结构的工具。目前,我们提供Zend_Dom_Query,它提供了一个统一的界面,可以使用XPath和CSS选择器查询DOM文档。

QueryPath

  

QueryPath是一个用于操作XML和HTML的PHP​​库。它不仅适用于本地文件,还适用于Web服务和数据库资源。它实现了许多jQuery接口(包括CSS样式的选择器),但它在服务器端使用时经过了大量调整。可以通过Composer安装。

fDOMDocument

  

fDOMDocument扩展了标准DOM,以便在所有错误情况下使用异常,而不是PHP警告或通知。为方便起见,他们还添加了各种自定义方法和快捷方式,并简化了DOM的使用。

saber /xml

  

saber /xml是一个包装和扩展XMLReader和XMLWriter类的库,用于创建一个简单的“xml到对象/数组”映射系统和设计模式。编写和读取XML是单遍的,因此可以很快并且需要在大型xml文件上使用低内存。

FluidXML

  

FluidXML是一个用于使用简洁流畅的API来操作XML的PHP​​库。   它利用XPath和流畅的编程模式,既有趣又有效。


第三方(不是基于libxml的)

构建DOM /libxml的好处是,您可以获得良好的开箱即用性能,因为您基于本机扩展。但是,并非所有第三方库都沿着这条路线行进。其中一些列在下面

PHP Simple HTML DOM Parser

  
  • 用PHP5 +编写的HTML DOM解析器允许您以非常简单的方式操作HTML!
  •   
  • 需要PHP 5 +。
  •   
  • 支持无效的HTML。
  •   
  • 使用选择器在HTML页面上查找标签,就像jQuery一样。
  •   
  • 从一行中提取HTML内容。
  •   

我一般不推荐这个解析器。代码库很糟糕,解析器本身很慢而且内存很耗。并非所有jQuery选择器(例如子选择器)都是可能的。任何基于libxml的库都应该很容易胜过这个。

PHP Html Parser

  

PHPHtmlParser是一个implementation,flexible,html解析器,允许你使用任何css选择器选择标签,比如jQuery。目标是帮助开发需要快速,简单的方法来废弃html的工具,无论它是否有效!这个项目最初是由sunra /php-simple-html-dom-parser支持的,但支持似乎已经停止,所以这个项目是我对他以前工作的改编。

同样,我不推荐这个解析器。 CPU使用率很高,速度相当慢。还没有清除已创建DOM对象的内存的功能。这些问题尤其适用于嵌套循环。文档本身不准确且拼写错误,自4月14日以来没有回复修复。

Ganon

  
  • 通用标记器和HTML /XML /RSS DOM解析器      
    • 操纵元素及其属性的能力
    •   
    • 支持无效的HTML和UTF8
    •   
  •   
  • 可以对元素执行类似CSS3的高级查询(例如jQuery - 支持的命名空间)
  •   
  • HTML美化器(如HTML Tidy)      
    • 缩小CSS和Javascript
    •   
    • 排序属性,更改字符大小写,更正缩进等。
    •   
  •   
  • 可扩展      
    • 使用基于当前字符/标记的回调解析文档
    •   
    • 以较小的功能分隔的操作,以便轻松覆盖
    •   
  •   
  • 快捷方式
  •   

从未使用过它。无法判断它是否有用。


HTML 5

您可以使用上述方法解析HTML5,但由于HTML5允许的标记,可能存在怪癖。因此,对于HTML5,您需要考虑使用专用解析器,例如

html5lib

  

基于WHATWG HTML5规范的HTML解析器的Python和PHP实现,可最大程度地兼容主要桌面Web浏览器。

HTML5最终确定后,我们可能会看到更多专用解析器。 W3还有一篇博文标题为 html 5的操作方法解析值得一试。


Web服务

如果您不想编写PHP,您也可以使用Web服务。一般来说,我发现这些实用程序的效用很小,但这只是我和我的用例。

ScraperWiki

  

ScraperWiki的外部界面允许您以希望在Web或自己的应用程序中使用的形式提取数据。您还可以提取有关任何刮刀状态的信息。


正则表达式

最后和最不推荐,您可以使用正则表达式

来源放置 这里