HTML哪个解析器是最好的

html-css034

HTML哪个解析器是最好的,第1张

解析HTML最好的类还是微软自己的在站内搜索的项目要进行HTML的解析,发现程序运行非常慢,一开始以为是lucene的问题,一测试大吃一惊,每一步lucene中AddDocument等只用了几十毫秒,而HTML解析竟然用了9秒。日志如下:2010-06-26 15:51:25,171 [8] DEBUG SearchSite.StartIndex - DownloadString:00:00:00.04823292010-06-26 15:51:34,187 [8] DEBUG SearchSite.StartIndex - ThreadParser:00:00:09.02364902010-06-26 15:51:34,187 [8] DEBUG SearchSite.StartIndex - DeleteDocuments:00:00:00.00000692010-06-26 15:51:34,203 [8] DEBUG SearchSite.StartIndex - AddDocument:00:00:00.0191071我使用的是Winista.HtmlParser这块网上找到的HTML解析器。遂准备更换解析器,但是用“.Net HTML Parser”在google上寻找,一直没找到合适的解析器,不是太难用,就是性能比Winista.HtmlParser还差,我才想到,微软的MSHTML不就是用来解析HTML的吗?折腾这么一圈却忘了微软自家的东西,微软的东西性能肯定差不了。添加对Microsoft.mshtml这个程序集的引用,然后编写如下代码:IHTMLDocument2 doc = new HTMLDocumentClass() doc.write(new object[]{pageSource}) doc.close() Title = doc.title Body = doc.body.innerText再测试,哇咔咔,快的要命,只有几十毫秒,2000个帖子一会儿就爬完了。日志如下:2010-06-26 16:26:35,546 [8] DEBUG SearchSite.StartIndex - DownloadString:00:00:00.04002632010-06-26 16:26:35,562 [8] DEBUG SearchSite.StartIndex - ThreadParser:00:00:00.02577312010-06-26 16:26:35,562 [8] DEBUG SearchSite.StartIndex - DeleteDocuments:00:00:00.00019132010-06-26 16:26:35,578 [8] DEBUG SearchSite.StartIndex - AddDocument:00:00:00.0010881HTMLDocumentClass的方法比任何一个网上找到的HTML解析器都丰富,想怎么搞就怎么搞,而且调用方法就是操作Dom的方法,完全不用再去学,哇咔咔,爽呆了。在使用的过程中遇到两个问题:1、VS2010中引用Microsoft.mshtml之后,要修改这个引用的“嵌入互操作类型”为False。2、调用doc.write方法的时候必须通过IHTMLDocument2接口来调用,否则报错“错误的类型”,在google上搜“type mismatch HTMLDocument write”

1."COM组建"为"COM组件"。

2.建议还是不要手动解析HTML,那个似乎太费劲了。

3.在实际运用中,我也用过一些其它的XML解析工具,比如libxml,但感觉在WINDOWS还是MSXML最方便。

HTMLParser只是一个HTML解析器,现在还有一个更高级的叫做:Java Mozilla HTML parser,是国外的Dapper公司将Mozilla的浏览器解析器用Java编程语言进行了封装,用于他们的著名的语义网络服务网站,后来开源出来贡献给社区。

用解析器将HTML解析成DOM后,应该使用一种合理的方法从DOM中将内容提取出来,例如,XPath和XSLT,上述需求就可以用XSLT提取,XSLT根据匹配规则找出来的是一个节点集合,所以能够解决你说的重复次数不确定的问题,但是,XSLT提取规则并不好编写,可以采用免费软件MetaSeeker,能够自动生成XSLT规则,也可以局部定制规则片段。

欢迎访问我的博客或者访问GooSeeker网站,上面有很多技术资料。