[转摘]利用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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 3分钟告诉你如何成为一名黑客?|零基础到黑客入门指南,你只需要掌握这五点能力

    3分钟告诉你如何成为一名黑客?|零基础到黑客入门指南,你只需要掌握这五点能力三分钟带各位揭秘黑客究竟是什么,以及想要成为黑客都需要具备哪些能力?

    2022年6月4日
  • Java从入门到精通技术书籍最全50+本推荐(内附电子书资源无偿共享)建议收藏!

    Java从入门到精通技术书籍最全50+本推荐(内附电子书资源无偿共享)建议收藏!前言:技术书阅读方法论一.速读一遍(最好在1~2天内完成)人的大脑记忆力有限,在一天内快速看完一本书会在大脑里留下深刻印象,对于之后复习以及总结都会有特别好的作用。对于每一章的知识,先阅读标题,弄懂大概讲的是什么主题,再去快速看一遍,不懂也没有关系,但是一定要在不懂的地方做个记号,什么记号无所谓,但是要让自己后面再看的时候有个提醒的作用,看看第二次看有没有懂了些。二.精读一遍(在2周内看完)有了前面速读的感觉,第二次看会有慢慢深刻了思想和意识的作用,具体为什么不要问我,去问30年后的神经大脑专家

    2022年7月8日
  • Python set集合 – Python零基础入门教程

    Python set集合 – Python零基础入门教程目录一.set集合简介二.set集合常用函数三.set集合运算符四.猜你喜欢零基础Python学习路线推荐: Python学习目录 >>&#16

    2022年7月5日
  • mysql useradd_useradd 创建用户

    mysql useradd_useradd 创建用户useradd创建用户1.命令功能useradd创建一个新用户或者更改默认新用户信息。2.语法格式useraddoptionusernameuseradd-Doption参数选项选项选项说明-c新用户passwd文件中的说明栏(冒号分割第5栏)-d新用户的登录时的家目录-e用户被禁用时间。零时账号日期YYYY-MM-DD格式。-g指定用户对应组,用户组必须为系统现有组名称。-…

    2022年10月24日
  • linux将目录移动到指定目录下_shell获取文件所在路径

    linux将目录移动到指定目录下_shell获取文件所在路径摘要腾兴网为您分享:第七应用,flash29,信息来电闪光灯,优惠购,实况足球2018,汕大附一,同学聚会简单通知书,cajviewer,惠普deskjet1010,英魂之刃,运动世界,建行大学,爱奇艺会员,sketchup渲染器,电脑尺子,中俄边境游,山东政务服务网等知识经验教程,欢迎大家关注腾兴网。linux系统下,用户根据需求来进行各项操作,有小伙伴想移动文件,操作起来不大容易,linux…

    2022年10月5日
  • 为什么程序员做外包会被瞧不起?

    为什么程序员做外包会被瞧不起?二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

    2022年6月7日

发表回复

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

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