zoukankan      html  css  js  c++  java
  • 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页面格式检查、内容检索、内容抓取、内容更改等等。

  • 相关阅读:
    个人项目作业
    自我介绍+软工五问
    Word Count
    个人简介+软工五问
    小学生算术题生成器
    个人项目-WC
    个人简历+软工五问
    学习有感
    学习爱我
    软件工程学习记录
  • 原文地址:https://www.cnblogs.com/tedzhao/p/HTML_Parser.html
Copyright © 2011-2022 走看看