代码改变世界

利用SgmlReader返回XPath分析HTML

2009-09-04 17:01  jelyly  阅读(1157)  评论(0编辑  收藏  举报

      SgmlReader是一款SGML解析器,通过解析html文件,并能有效的把html转换为格式较规范的XHTML。
      所以,再利用XPath去查找你所想要的值是非常方便的。
      个人分析HTML方法:
                  1.正则表达式 
                  2.字符串截取 
                  3.把HTML代码当成树形结构理解,想取到哪个节点的值很方便(属xml的一种)
      最近朋友需要一些房地产的数据,我试着找了一些采集的方法,google很多,最终无果。花一个晚上自己写了个简单房地产数据采集。

      核心是利用SgmlReader生成XHTML文档后,根据XPath 语句来读取数据。
      步骤: 
             1. 下载WebURL HTML 代码以StreamReader 返回
Code


             2.在得到远程的HTML文件后,你就可以创建一个SgmlReader类的实例了。通过将其DocType属性设置为“HTML”,HTML文件的响应流可以被加载到SgmlReader实例,通过其InputStream属性进行解析。首先将HTML文件流加载到一个TextReader对象,然后将TextReader赋值给InputStream属性:

1             SgmlReader reader = new SgmlReader();
2             reader.DocType = "HTML";
3             reader.InputStream = new StringReader(sReader.ReadToEnd());//sReader为远程HTML所返回的

            3.现在,你就可以通过调用SgmlReader的Read()方法来解析HTML文件了:

Code

            4.因为SgmlReader创建了格式规范的HTML,所以你可以用XPath语句来读取不同的节点。下面的代码说明了如何将SgmlReader生成的输出结果加载到一个XPathNavigator,然后如何用一个XPath语句来查询HTML文件结构: 

Code

            例:如下HTML代码,要取到这个img的src地址

Code


 

如果你对XPath语言已经很熟悉,并了解.NET Framework中不同的XML解析API了,那么你就可以很容易地用SgmlReader类来解析HTML并读取数据了。

附:
      SgmlReader下载:http://download.csdn.net/source/1440928   这个地址需一个积分,我也被扣一个,呵。