HTML Parser

引子

以前一直在当当上买书,后来听说京东也要卖书了,要跟当当PK于是就想做一个比价的工具,需求就是提供一个书名,要求返回各个网上书店是否有货,价格是多少,还有一些书的基本信息。

 

当然貌似现在已经有这样的一些网站,但是作为程序员,还是想自己做一个,研究研究相关技术。

 

开始:

一番Google之后,各大网点均没有提供查询API只能是通过其自身WEB网页上的查询,也就是在其网页上输入书名后,点击搜索,观察新页面的URL然后改变查询关键字来搞定。

 

.NET提供了WebClientWebRequest等类型可以进行Http请求,对上一步拿到的URL进行请求后,会拿到一段很长的HTML文本。

 

这样就来到了本文的正题,如何进行HTML解析。

 

HTML 解析:

1.       解析之前要进行过滤,滤掉所有的CSSJavaScript句,这个可以使用正则表达式搞定。

如下代码:

source  = Regex.Replace(source, @"<script[^>]*?>.*?</script>", string.Empty, RegexOptions.IgnoreCase);

      2.       目前HTML的解析大致有两种做法,可以根据需求采用合适的做法:

-          HTML DOM

HTML文本解析成一颗HTML DOM Tree,而后基于树状结构供用户使用。

Html Agility Pack是一个开源类库,就属于这一种做法,支持XPATHLINQ查询,易用性非常好。 

              Scott Mitchell写了一篇很好的文章来介绍这个类库的使用:Parsing HTML Documents with the Html Agility Pack  

 

-          顺序读取

其思想是将所有节点分为三类:头节点例如“<p>”,文本例如“Text”,还有尾节点例如“</p>”。整个HTML文本被打平,解析成为一个节点列表。

HTML parser就是这样一种做法,其特点是性能快。CSDN上有一篇帖子写的很好,思想跟这个类似,链接:  http://blog.csdn.net/liigo/archive/2011/01/19/6153829.aspx

 

       根据我的需求,我还是使用了Html Agility Pack库,可以很方便的从HTML中检索出需要的信息。

 

       结语:

       HTML Parser用处还是很大的。比如Web页面格式检查、内容检索、内容抓取、内容更改等等。

原文地址:https://www.cnblogs.com/tedzhao/p/HTML_Parser.html