HTML哪个json解析器器是最好的

HTML解析利器HtmlAgilityPack
<span type="1" blog_id="595344" userid='
分享到朋友圈
好的文章,和好友一起分享16被浏览1,677分享邀请回答github.com/tautologistics/node-htmlparser/blob/master/utils_example.js11 条评论分享收藏感谢收起01 条评论分享收藏感谢收起写回答HTML解析,为啥常规解析器都不适用? -- 简明现代魔法python html 解析工具是什么意思_百度知道
python html 解析工具是什么意思
我有更好的答案
它也可以不适用内置的解析器而使用 BeautifulSoup 或者 html5lib 进行解析:35.2; Genshi:7.3; HTMLParser:2.9; htmlfill:4.5第一个测试运行这些解析器解析文档。需要注意的是,但是我觉得应该影响不大。所以,除非考虑到一些难以解决的安装问题(尤其是在Mac上),然而 html5lib 却能够生成几种不同的文档树(DOM树),但是实际上没检测到什么,能够产生文档对象,支持HTML序列化。xml.dom.minidom:python标准库里的内置文档模型,html5lib 能够解析出这种文档对象:64; html5 htmlfill,支持HTML序列化,但是数据总能说明一些问题。这项测试会解析所有的文档并把解析出来的DOM树保存在内存中,利用 ps 命令结果的RSS(resident set size)段来表示进程占用的内存.4最后一项测试是内存。我并不是特别确信我做这个测试的方法很科学,还有很多理由我没写出来)我预想 lxml 的性能会比较好,因为它基于 libxml2这个C库。但是实际上它的性能比我预计的还要好,超过其它所有的同类库。计算基准内存占用之后所有的库已经被 HTMLParser。序列化也分为XML和HTML两种方式。所以我选取了下面这些解析器的库做基准性能测试。还有就是,Genshi居然比minidom要慢; html5lib ElementTree,只产生一些中间字符串。这些中间字符串最终也不回占用多少内存。内存占用lxml:26。Genshi[1]:lxml:包含一个解析器,能够产生文档对象,可是 lxml 又一次遥遥领先。而 BeautifulSoup 内部也拥有一个文档对象; html5lib cElementTree:54。这里也没有包含 html5lib 所能生成的全部种类的树,因为每一种花费的时间都差不多:5,不过我也没测试这个XML序列化器):这是一个使用C语言扩展实现的python模块,实现了ElementTree:98; html5lib minidom:192; Genshi:64:包含一个解析器。ElementTree。这些测试数据来自于从 python,所以只有解析HTML和生成文档对象会导致内存使用量上升。BeautifulSoup。html5lib:有解析器; BeautifulSoup lxml,html5lib 使用 cElementTree 来表示文档对象同使用 ElementTree 能表现出明显的不同。它也有一个解析器,测试的时候我用html5lib当做解析器来测试ElementTree的。cElementTree。解析lxml:0.6; BeautifulSoup:包含一个解析器,能够产生文档对象,实话说任何比minidom要慢的东西都挺让人震惊的:lxml 比 HTMLParser快6倍,尽管 HTMLParser不生成任何文档对象(lxml在内存中建立了一个文档树),很多正常网页都不能正常处理(包含Table或者Script),有语法错误的网页就更处理不了了。它只是使用解析器遍历文档。 HTMLParser 仅仅做解析(不解析出任何对象),但是我没有使用它。它也有一个内置的文档对象(即simpletree),只是…除了自我测试我也不知道这东西还能做什么。ElementTree 和 minidom 只做XML序列化,但是没有理由说HTML序列化更快。之所以包含了使用 xml.dom.minidom 作为输出结果的 html5lib 测试结果是为了说明 minidom 有多慢; BeautifulSoup:2.0; html5lib ElementTree:1.9; html5lib minidom:3.8; Genshi:4.4所有这些库执行序列化都很快.5:0,我都推荐你用lxml 来进行HTML解析的工作:4; BeautifulSoup:82。(我并不推荐使用minidom — 这篇文章里写了一些理由.2。Genshi确实很快,只是它也是最不稳定的:10.6; html5lib ElementTree:30:104。为了检测是否有这种情况:这个包里有一个XML序列化器,ElementTree能够产生文档对象,它也是python内置的XML解析模块。(我觉得下个版本会带一个HTML序列化器。里面包含了所有的样例数据,用来生成图表的命令在这里,你可以自己下载下来运行测试程序。HTMLParser:包含一个解析器。但是其实它不能解析出文档对象在准备我的 PyCon上关于HTML的演讲 的时候我觉得我应该对现有的一些解析器和文档模型做个性能对比。实际上,情况有点复杂,如果一个解析器创建了很多中间对象(字符串等等)然后又释放了它们; html5lib minidom.org 随机选取的一些页面(总共355个)。序列化lxml。它也有一个序列化器,只有 BeautifulSoup 解析器,在序列化到一个 lxml 树的时候,显示出使用了额外的内存。只有在内存测试中。我才用 HTMLParser 作为基准线,因为它把文档保存在内存中,有些只处理第二步,有些能处理所有的三个步骤…。例如,它在解析过程中对Element做了更多处理,我试着分配一些新的字符串知道进程占用的内存增长(检测已经分配但是没有被使用的内存),ElementSoup 使用 ElementTree 来表示文档,却使用 BeautifulSoup 作为实际的解析器,我猜因为我没有找到一个C语言编写的序列化工具,我猜使用 cElementTree 构建文档树的话,只有在用本地代码调用它的时候比较快(就像本地的libxml,并且不需要把数据结构传递到python中)。lxml比较节省内存很可能是因为它使用了本地的libxml2的数据结构,并且只有在需要的时候才创建Python对象。总结在进行基准测试之前我就知道lxml会比较快,但是我自己也没料到会这么快。所以呢,总结一下:lxml太牛逼了[2]。你可以用很多种方式使用它,你可以对一个HTML进行解析,序列化,解析,再序列化,在机器卡机之前你能重复这些操作很多次。很多操作都是通过本地接口实现的,python只做了一层很浅的封装。例如,如果你做一次XPath查询,查询字符串会被编译为本地代码,然后遍历本地的libxml2对象,只在返回查询结果的时候才会产生一个python对象。 另外,测试中lxml内存占用比较小使我更有理由相信lxml在高负载的情况下仍然会很可靠。我觉得,文档树相对按字符流解析(不生成树,只扫描一次文档并针对特定的标签做处理)更有优势。表面看起来按字符流解析更好:你不把整个文档放在内存里,处理的时间之和文档大小线性相关。HTMLParser就是这样一种解析器,遇到各种符号(标签开始和关闭,变迁中间的文字等等)。Genshi 也是用的这个模型,因为使用了一些更高级的特性(比如 filters)所以使用起来更自然一些。其实字符流模型本身就不是一种特别自然的处理XML文档的方式,从某种程度上说,它只是用来处理一些本来就可以当做字符串处理的文档的一种笨拙的方法(regex可以实现同样的功能)。只有你需要处理上G的XML文件的时候按字符流解析才有意义(不过lxml和ElementTree针对这种情况都有额外的参数支持)。HTML文件不会有这么大,这些测试也有理由让我们相信lxml可以很好的处理大的HTML文件,所以一个大文档也不会导致一个为小文档优化过的系统崩溃。Ian Bicking on Sunday, March30th, 2008[1]. Genshi是EdgewallSoftware的产品,它的其他产品还包括大名鼎鼎的Trac。[2]. 本文的作者Ian Bicking是lxml.html(lxml的一个模块)的开发者和维护者(这里修正一下)。P.S. 译者记:这里还有一个解析器没有提到就是python标准库里的SGMLParser,它也可以产生ElementTree,但是性能很差,本机测试解析600k的html文档(ddd的单页html文档)需要480秒,不推荐应用在性能要求比较高的场合。本文作者也是lxml的作者,对自己的作品大力推荐也是正常的,我实测过lxml性能确实很好。,因为处理HTML需要几个步骤:解析这个 HTML把它解析为一个对象(比如一个文档对象)把它序列化有些解析器只处理第一步,进程仍然会持有这些内存,相比之下,html5lib , lxml 以及 BeautifulSoup 都要健壮的多。html5lib 的好处是,总是能够正确的解析HTML(至少在理论上如此)。lxml在解析过程中会释放 GIL ,因为内存占用基本上等同于这些html问价大小之和。测量过程中有个棘手的问题就是python的内存分配器并不会释放它请求的内存,所以。我的测试代码在这里.3。htmlfill:它使用了HTMLParser作为解析器,相对HTMLParser,支持HTML序列化。我倒不是很惊讶
为您推荐:
其他类似问题
您可能关注的内容
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。博客分类:
HTML Parser
是一个对HTML进行分析的快速实时的解析器,最新的发行版本是1.6,另外2.0的开发版本已经两年没有进展了。 示例代码: Parser
parser = new Parser ("http://whatever"); NodeList list = parser.parse
(null); Node node = list.elementAt (0); NodeList sublist...
NekoHTML 是一个Java语言的 HTML扫描器和标签补全器(tag balancer)
,使得程序能解析HTML文档并用标准的XML接口来访问其中的信息。这个解析器能够扫描HTML文件并“修正”许多作者(人或机器)在编写HTML文档
过程中常犯的错误。 NekoHTML能增补缺失的父元素、自动用结束...
JTidy 是 HTML Tidy
用Java语言实现的版本,提供了一个HTML的语法检查器和很好的打印功能。JTidy可以用来清除格式不好和不对的
HTML。此外,JTidy提供了对整个HTML的DOM分析器。程序员可以将JTidy当作一个处理HTML文件的DOM解析器来使用。...
HtmlCleaner
是一个开源的Java语言的Html文档解析器。HtmlCleaner能够重新整理HTML文档的每个元素并生成结构良好(Well-Formed)的
文档。默认它遵循的规则是类似于大部份web浏览器为创文档对象模型所使用的规则。然而,用户可以提供自定义tag和规则组来进行过滤和匹配。...
Cobra 是一个纯 Java 的HTML 解析和生成器,支持 HTML 4
、JavaScript、CSS 2 示例代码: import org.lobobrowser.html.parser.*;import
org.lobobrowser.html.test.*;import org.lobobrowser.html.gui.*;import
org.lobobrowser.html.*;import org.w3c.dom.*;...HtmlPanel pa...
HTML解析器是一个Java库,以分析和操纵部分的HTML文件,其中包括服务器端的标签,而过滤掉任何无法识别的或无效的HTML
。它也提供高层次的HTML表单操作函数。 示例代码: import net.htmlparser.jericho.*;import
java.util.*;import java.io.*;import java.net.*;publ...
html5lib 是一个 Ruby 和 Python 用来解析 HTML
文档的类库,支持HTML 5 以及最大程度兼容桌面浏览器。 主要特性包括:
Parses valid and invalid HTML
documents to a tree
Support for minidom, ElementTree (including
cElementTree and lxml.etree), BeautifulSoup and ...
Aaron Patterson和Mike
Dalessio开发了一个新的Ruby解析HTML/XML的ruby库 -
Nokogiri。他的速度比目前应用的最广泛的Hpricot还要快许多。经过Benchmark测试表明,Nokogiri在加载XML文档的速度是
Hpricot的7倍,在XPATH搜索的速度是Hpricot的5倍,而在CSS选择器的搜索上面是Hpr...
毫 无疑问,HTML、HTTP 和 XML 是支撑 Web 技术的三种最重要的技术。对于
PHP 开发人员而言,使用这些技术可能比较麻烦。但是,新的 QueryPath 库,即 jQuery JavaScript 库面向 PHP
的一个版本,为使用 XML、HTML 和 HTTP 提供了一个方便的 API。从 Web 页面到 Web 服务、从 ...
TagSoup 是一个Java开发符合SAX的HTML解析器
MozillaParser 是一个 Java 的HTML 解析类库,基于 mozilla 的html 解析器,提供了Java类到 Mozilla类的一个桥接,输入一个HTML文本,输出一个 Java 的 Document 对象。
HotSAX是一个快速,小型的footprint,用于HTML/XML/XHTML的非确认的SAX2解析。它可以在简单的Web代理、页面抓取器和爬虫程序中使用。它类似于ApacheXerces分析器。
Dev-PHP2,一个针对PHP开发,免费开源的软件。 主要特点包括:
1.支持多语言界面;2.嵌入PHP手册。在选项中设置好你的中文手册后,可以直接在软件中查看;3.支持UTF-8。可选择是否添加BOM;4.支持
Snippets。(这个功能似乎有点问题,我添加的好像不能保存。)5.支持PHP解析和D...
Zend Framework (ZF) 是用 PHP 5 来开发 web
程序和服务的开源框架。ZF 用 100% 面向对象编码实现。 ZF
的组件结构独一无二,每个组件几乎不依靠其他组件。这样的松耦合结构可以让开发者独立使用组件。 我们常称此为 “use-at-will”设计。
虽然它们...
一、 什么是CommonTemplate?
CommonTemplate是一个开源的模板引擎,用于编译运行CTL模板语言,并且模板可以在Java,.Net,JS等中通用;
其主要目标是作为JSP,ASP.Net等页面技术的另一种选择方案,以保证用简单的语法,良好的结构,不混杂业务逻辑的方式书写页面;
适合于充当M...
Echo(http://nextapp.com/)是一个开源的完全基于 Ajax
技术的开发框架,用它做出的系统是一个单页面系统,所有的界面更新都是通过不停的更新 DOM 来实现;而且系统只有一个 URL,所以用户很难通过
URL 来非法进入系统内部。 它通过一个强大的基于 Ajax 的展现(rendering)引...
KchmViewer: Linux下 CHM 阅读器。这个在去年 12 月 2 日发布的
4.0 版本,实在是一个巨大的进步。它不仅是 KchmViewer 向 KDE 4
移植后的第一个正式发布的版本,而且是几乎没法挑毛病的版本。它最大的特性是在解析二进制的内容及索引时,速度比以前快了五倍。对于某些复杂的内...
Pivot 是一个开源PHP文本型Blog程序,有以下优点 1. 不需要MySQL数据库
2.代码写得比较好,Blog应有的功能都有 3. 生成HTML(其实是缓存解析) 4.速度很快
5.支持Rewrite,和WordPress差不多 6. 有中文包 7. 程序结构很不错 来个Pivot后台图片 ...
Ziproxy是转发,非缓存,压缩HTTP代理服务器。. Ziproxy
可以压缩图像转换到低质量JPEG文件或JPEG 2000和压缩( gzip或) HTML和其他文字样的数据。同时它还提供 HTML/CSS/JS
的优化,主动的主机名称解析,透明代理等。 Ziproxy 适合在以下情况下使用:
ISPs 提供拨号服务 IS...
Tika 是一个内容抽取的工具集合(a toolkit for text
extracting)。它集成了POI, Pdfbox
并且为文本抽取工作提供了一个统一的界面。其次,Tika也提供了便利的扩展API,用来丰富其对第三方文件格式的支持。在当前的0.2-
SNAPSHOT版本中, Tika提供了对如下文件格式的支持: PDF - ...
Arachnid 是一个基于Java的web
spider框架.它包含一个简单的HTML剖析器能够分析包含HTML内容的输入流.通过实现Arachnid的子类就能够开发一个简单的Web
spiders并能够在Web站上的每个页面被解析之后增加几行代码调用。
Arachnid的下载包中包含两个spider应用程序例子用于演示如何...
Mako 模板是从文本流中进行解析的,流中可以包含任意内容: XML, HTML, email
文本,等等。模板中可以包含 Mako
特定的指令(directives),可用于表示变量或表达式替换,控制结构(如条件和循环),服务器端注释,整段的 Python
代码,以及各种用于提供附加功能的标签(tags)。所有...
BlueCloth是一个Markdown的Ruby实现,一个提供给网页文字撰写者将文本转成
HTML的工具。Markdown令你可以写出容易阅读、容易撰写的文本格式,然后将它转换成结构化的XHTML(或者HTML)。
和其它轻量标记语言一样,Markdown并不能也不旨在替代HTML;因为所有的网页最终都要交给浏...
Maruku是一个Markdown的Ruby解释器。它同时还实现了PHP Markdown
extra的语法。
Maruku和BlueCloth的实现方式不一样。Maruku是在内存创建Markdown文档对象,而BlueCloth是用string的
gsub来进行转换。因此BlueCloth解释小文本的时候比较快,但是Maruku解释大文本的时候会比Blu...
原文地址:http://hi.baidu.com/zhanghaooy/blog/item/ccd52fcfa7ef3f05.html
浏览: 32373 次
来自: 北京
自己顶个沙发,留个话
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 json在线解析器 的文章

 

随机推荐