[转摘]利用SgmlReader返回XPath分析HTML

[转摘]利用SgmlReader返回XPath分析HTML

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

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

[转摘]利用SgmlReader返回XPath分析HTML
[转摘]利用SgmlReader返回XPath分析HTML
Code

 1                 Random ro = new Random();
 2                 int r = ro.Next();
 3                 string strUrl = url + &id= + r.ToString();
 4 
 5                 HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(strUrl);
 6                 request.Method = WebRequestMethods.Http.Get;
 7                 request.Timeout = 10000;
 8                 HttpWebResponse response = (HttpWebResponse)request.GetResponse();
 9                 StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding(utf-8));
10 
11                 return reader;

             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文件了:

[转摘]利用SgmlReader返回XPath分析HTML
[转摘]利用SgmlReader返回XPath分析HTML
Code

 1             StringWriter sw = new StringWriter();
 2             XmlTextWriter writer = new XmlTextWriter(sw);
 3             writer.Formatting = Formatting.Indented;
 4             while (reader.Read())
 5             {

 6                 if (reader.NodeType != XmlNodeType.Whitespace)
 7                 {

 8                     writer.WriteNode(reader, true);
 9                 }
10             }

 

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

[转摘]利用SgmlReader返回XPath分析HTML
[转摘]利用SgmlReader返回XPath分析HTML
Code

            XPathDocument doc = new XPathDocument(new StringReader(sw.ToString()));
            XPathNavigator nav 
= doc.CreateNavigator();
            XPathNodeIterator nodes 
= nav.Select(xPaths);//xpath表达式
              while (nodes.MoveNext())
            {

                str 
+= nodes.Current.Value + |;//str为你所根据xpath取到的值
            }
            
return str;

 

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

[转摘]利用SgmlReader返回XPath分析HTML
[转摘]利用SgmlReader返回XPath分析HTML
Code

HTML:
<div class=pBorder align=left>
<img src=http://pic.xxxxx.com/images/images/2009-04/461232.jpg alt=新世界四季山水 title=新世界四季山水>
</div>

XPath 为:xpath = //div[@class=’pBorder’]/img/@src;

传入上面方法中及返回:http://pic.xxxxx.com/images/images/2009-04/461232.jpg

 

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

附:SgmlReader下载:http://download.csdn.net/source/1440928

转载于:https://www.cnblogs.com/dannyqiu/articles/1902955.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110682.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 其实就是为了能有字幕特效,用MeGUI + AVS压制PSP MP4AVC视频01 – 基础知识篇

    其实就是为了能有字幕特效,用MeGUI + AVS压制PSP MP4AVC视频01 – 基础知识篇A、需要准备的软件: .netframework2.0运行库(下面两个软件都是.net写的)MeGUI(AVS等软件的集合GUI)LiteMP4Tool(批处理AVS转换的GUI)通用解码器包,能够播放各类视频文件即可,包括K-LiteCodec、完美解码甚至暴风影音(这个不推荐)之类。avisynth2.58,这个我自己用的完美解码附…

    2022年10月16日
    0
  • 随笔

    随笔

    2021年8月21日
    61
  • maven打包常用命令总结

    maven打包常用命令总结maven打包常用命令总结基本命令介绍1、mvnclean2、mvncompile3、mvnpackage4、mvninstall5、mvndeploy生产环境打包举例1、生产环境根据源码构建项目:2、可用用到的其他mvn参数介绍:开发过程中常见以下几个命令,这些命令执行后程序究竟发生了什么变化?生产环境如果使用shell脚本配置jenkins构建项目,如何使用命令呢?下面介绍一下我常…

    2022年6月4日
    46
  • UML类图总结(浅显易懂实用)

    UML类图总结(浅显易懂实用)UML类图的作用是描述程序中类的信息及各个类之间的关系。所有的面向对象(ObjectOriented)语言都离不开类的概念,理解了程序中类的设计也就理解了程序的一半。但类的具体描述方式在各个类中都不一样,UML类图的提出是为了能够脱离语言的限制,抽象地描述各个类的信息及各个类之间的关系。这是UML类图的作用。一、类的基本表示方式在UML类图中,每一个矩形代表一个类。我们举一个简单的例子:这是一个…

    2022年7月12日
    13
  • 大话数据结构PDF原文内容分享[通俗易懂]

    大话数据结构PDF原文内容分享[通俗易懂]大话数据结构为超级畅销书《大话设计模式》作者程杰潜心三年推出的扛鼎之作!以一个计算机教师教学为场景,讲解数据结构和相关算法的知识。通篇以一种趣味方式来叙述,大量引用了各种各样的生活知识来类比,并充分运用图形语言来体现抽象内容,对数据结构所涉及到的一些经典算法做到逐行分析、多算法比较。与市场上的同类数据结构图书相比,本书内容趣味易读,算法讲解细致深刻,是一本非常适合自学的读物。获取方式提取码:8i5k目录第1章数据结构绪论1.1开场白1.2你数据结构怎么学的?1.3数据结构起源1.

    2022年6月24日
    30
  • 经典算法

    经典算法

    2021年5月19日
    117

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号