PHP原生DOMDocument和简单DOM解析器

我需要解析HTML文档(由Microsoft Word制作)的内容。 遍历DOM以获取我需要的信息/内容,然后将所需的信息输出为CSV。 我知道,几乎没有脑部手术。

现在,由于PHP并不是我的东西,而且我的计划很紧张,所以我将使用http://simplehtmldom.sourceforge.net/中的PHP Simple HTML DOM解析器

我注意到我的脚本不工作。 经过试验和错误之后,我意识到这是由于Word生成的HTML文件的文件大小(它们是3MB,并且有多达30,000行HTML!)。 我认为文件大小限制了PHP Simple DOM DOM解析器和本地PHP DOMDocument API的解析能力 ? 如果是这种情况,是否有人知道这个限制是什么? 我一直在Google上搜索40分钟,但没有成功。

也许我应该只使用Node.js?


PHP“Native” DOMDocument Docs及其小妹妹SimpleXMLElement Docs没有硬编码的大小限制,但它们受限于允许PHP使用的内存(请参阅PHP内存limitDocs)。

另外,您不能认为加载100 MB XML或HTML文件会占用相同大小的内存。 它通常比文件大小少得多(例如,五分之一或十分之一甚至更少),这取决于XML,所以你不能只是在这里说X因子,而是如果你想获得精确度,你需要衡量你自己的信息)。

在你的问题中给出的文件大小 - 3 MB - 我想说的很小。 互联网上的HTML文件可能不小,但基于libxml的PHP扩展小。 您可以通过使用memory_get_usage() Docs加载该文件时了解PHP中的内存使用情况。

如果你有非常大的XML文件 - 那么通常是X(HT)ML - 比方说1.5千兆字节 - 使用DOMDocument进行解析将需要大量时间。 然后使用XMLReader Docs将允许您解析文档而不将其加载到内存中(完全)。 但它并非银弹,因为您仍然拥有分析时间,但您可以更好地控制要解析的内容以及跳过哪些部分,以便您有更多空间来控制PHP用户空间中的优化。


PHP库PHP Simple HTML DOM ParserDocs也不会强加特定的大小限制。 但它不是PHP的二进制扩展,而是PHP用户空间。 因此,您需要更好地理解该库的功能(请参阅HEAD修订版中的simple_html_dom.php )。 如果您查看代码,您可以看到它是纯粹用PHP编写的解析器。 这是因为它在那里有原来的PHP 4编写DOMDocumentDOMDocument::loadHTML还不存在。

正如您可以想象的,PHP扩展可以比使用PHP代码编写的PHP库更好地管理内存。 特别是当涉及到HTML Document对象模型的树结构时(这句话本身并不是真实的,但是开发优化的内存需要大量的工作和良好的设计,这并非总是易于创建和维护)。

但是:多年以来,没有必要再使用该库了。 许多PHP用户不知道,他们发现过时的代码示例使用曾经流行的库。 PHP Simple Simple DOM DOM解析器甚至仍然会在Stackoverflow上不时提出。

因此,我可以给出的最佳建议是:除非您不需要编写PHP 4兼容代码,否则根本不要使用该库,并且不关心其限制。 而是将代码移植到DOMDocument::loadHTML() Docs。


PHP简单的HTML DOM解析器有600KB的限制。

define('MAX_FILE_SIZE', 600000);

当然,您可以编辑您的库的副本并更改此常数。

链接地址: http://www.djcxy.com/p/29859.html

上一篇: PHP Native DOMDocument and Simple DOM Parser

下一篇: PHP Simple HTML DOM Parser adding script tag