程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

您如何在PHP中解析和处理HTML / XML?

发布于2021-03-10 19:54     阅读(757)     评论(0)     点赞(14)     收藏(1)


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


解决方案


本机XML扩展

我更喜欢使用本机XML扩展之一,因为它们与PHP捆绑在一起,通常比所有第3方库都快,并为我提供了所需的所有标记功能。

DOM

DOM扩展使您可以使用PHP 5通过DOM API通过XML文档进行操作。它是W3C的Document Object Model Core Level 3的实现,它是一种平台和语言无关的界面,允许程序和脚本动态访问和更新。文件的内容,结构和样式。

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

使用DOM需要花一些时间,但是IMO值得花时间。由于DOM是与语言无关的接口,因此您会发现许多语言的实现,因此,如果您需要更改编程语言,那么您很可能已经知道如何使用该语言的DOM API。

Grabbing A元素的href属性中可以找到一个基本的用法示例,而在php的DOMDocument中可以找到一个基本的概念概述

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

XMLReader

XMLReader扩展是XML提取解析器。阅读器充当光标,在文档流上前进,并在途中的每个节点处停止。

像DOM一样,XMLReader也基于libxml。我不知道如何触发HTML解析器模块,因此使用XMLReader解析损坏的HTML的机会可能不如使用DOM健壮,因为在DOM中您可以明确地告诉它使用libxml的HTML解析器模块。

一个基本的用法示例可以在使用php从h1标签获取所有值的过程中找到

XML解析器

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

XML解析器库也基于libxml,并实现了SAX样式的XML推送解析器。与DOM或SimpleXML相比,内存管理可能是更好的选择,但与XMLReader实现的请求解析器相比,使用起来更加困难。

SimpleXml

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

当您知道HTML是有效的XHTML时,可以选择SimpleXML。如果您需要解析损坏的HTML,甚至不用考虑SimpleXml,因为它会阻塞。

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


第三方库(基于libxml)

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

FluentDom -回购

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

HtmlPageDom

Wa72 \ HtmlPageDom是一个PHP库,可使用它轻松处理HTML文档。它需要Symfony2组件中的DomCrawler遍历DOM树,并通过添加用于处理HTML文档DOM树的方法来扩展它。

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是一个用于处理XML和HTML的PHP​​库。它不仅可以与本地文件一起使用,还可以与Web服务和数据库资源一起使用。它实现了许多jQuery接口(包括CSS样式的选择器),但为服务器端使用做了很大的调整。可以通过Composer安装。

fDOMDocument

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

军刀/ XML

sabre / xml是一个包装和扩展XMLReader和XMLWriter类的库,以创建简单的“从XML到对象/数组”的映射系统和设计模式。写入和读取XML是单次通过的,因此可以快速进行,并且在大型xml文件上需要较少的内存。

FluidXML

FluidXML是一个PHP库,用于使用简洁流畅的API来处理XML。它利用XPath和流畅的编程模式来使游戏变得有趣而有效。


第三方(不是基于libxml的)

在DOM / libxml上构建的好处是,由于您基于本机扩展,因此可以立即获得良好的性能。但是,并非所有第3方库都遵循这条路线。下面列出了其中一些

PHP简单HTML DOM解析器

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

我通常不建议使用此解析器。代码库太可怕了,解析器本身也很慢并且占用大量内存。并非所有的jQuery选择器(例如子选择器)都是可行的。任何基于libxml的库都应轻而易举地胜过它。

PHP HTML解析器

PHPHtmlParser是一个简单,灵活的html解析器,它使您可以使用任何CSS选择器(如jQuery)来选择标签。目的是协助开发工具,这些工具需要快速,简便的方式来刮擦html,无论它是否有效!该项目最初由sunra / php-simple-html-dom-parser支持,但该支持似乎已停止,因此该项目是我对他先前工作的改编。

Again, I would not recommend this parser. It is rather slow with high CPU usage. There is also no function to clear memory of created DOM objects. These problems scale particularly with nested loops. The documentation itself is inaccurate and misspelled, with no responses to fixes since 14 Apr 16.

Ganon

  • A universal tokenizer and HTML/XML/RSS DOM Parser
  •    Ability to manipulate elements and their attributes
    
  •    Supports invalid HTML and UTF8
    
  •    Can perform advanced CSS3-like queries on elements (like jQuery -- namespaces supported) 
    
  • A HTML beautifier (like HTML Tidy)
  •    Minify CSS and Javascript
    
  •    Sort attributes, change character case, correct indentation, etc. 
    
  • Extensible
  •    Parsing documents using callbacks based on current character/token
    
  •    Operations separated in smaller functions for easy overriding 
    
  • Fast and Easy

Never used it. Can't tell if it's any good.


HTML 5

You can use the above for parsing HTML5, but there can be quirks due to the markup HTML5 allows. So for HTML5 you want to consider using a dedicated parser, like

html5lib

A Python and PHP implementations of a HTML parser based on the WHATWG HTML5 specification for maximum compatibility with major desktop web browsers.

We might see more dedicated parsers once HTML5 is finalized. There is also a blogpost by the W3's titled How-To for html 5 parsing that is worth checking out.


WebServices

If you don't feel like programming PHP, you can also use Web services. In general, I found very little utility for these, but that's just me and my use cases.

ScraperWiki.

ScraperWiki's external interface allows you to extract data in the form you want for use on the web or in your own applications. You can also extract information about the state of any scraper.


Regular Expressions

Last and least recommended, you can extract data from HTML with regular expressions. In general using Regular Expressions on HTML is discouraged.

Most of the snippets you will find on the web to match markup are brittle. In most cases they are only working for a very particular piece of HTML. Tiny markup changes, like adding whitespace somewhere, or adding, or changing attributes in a tag, can make the RegEx fails when it's not properly written. You should know what you are doing before using RegEx on HTML.

HTML parsers already know the syntactical rules of HTML. Regular expressions have to be taught for each new RegEx you write. RegEx are fine in some cases, but it really depends on your use-case.

You can write more reliable parsers, but writing a complete and reliable custom parser with regular expressions is a waste of time when the aforementioned libraries already exist and do a much better job on this.

Also see Parsing Html The Cthulhu Way


Books

If you want to spend some money, have a look at

I am not affiliated with PHP Architect or the authors.



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.phpheidong.com/blog/article/103/c7915c61ad856452fdc9/

来源:php黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

14 0
收藏该文
已收藏

评论内容:(最多支持255个字符)