wIndows phone 7 解析Html数据

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 原文:wIndows phone 7 解析Html数据在我的上一篇文章中我介绍了windows phone 7的gb2312解码, http://www.cnblogs.com/qingci/archive/2011/11/25/2263124.
原文: wIndows phone 7 解析Html数据

在我的上一篇文章中我介绍了windows phone 7的gb2312解码,

http://www.cnblogs.com/qingci/archive/2011/11/25/2263124.html

解决了下载的Html乱码问题,这一篇,我将介绍关于windows phone 7解析html数据,以便我们获得想要的数据.

这里,我先介绍一个类库HtmlAgilityPack,(上一篇文章也是通过这个工具来解码的). 类库的dll文件我会随demo一起提供

这里,我以新浪新闻为例来解析数据

 

先看看网页版的新浪新闻

http://news.sina.com.cn/w/sd/2011-11-27/070023531646.shtml

然后我们看一下他的源文件,

发现新闻内容的结构是

<div class="blkContainerSblk">
				<h1 id="artibodyTitle" pid="1" tid="1" did="23531646" fid="1666">title</h1>
				<div class="artInfo"><span id="art_source"><a href="http://www.sina.com.cn">http://www.sina.com.cn</a></span>  <span id="pub_date">pub_date</span>  <span id="media_name"><a href="">media_name</a> <a href=""></a> </span></div>

				<!-- 正文内容 begin -->
				<!-- google_ad_section_start -->

				<div class="blkContainerSblkCon" id="artibody"></div>
</div>

大部分还有ID属性,这更适合我们去解析了。

接下来我们开始去解析

第一: 引用HtmlAgilityPack.dll文件

第二:用WebClient或者WebRequest类来下载HTML页面然后处理成字符串。

 public  delegate void CallbackEvent(object sender, DownloadEventArgs e);
        public  event CallbackEvent DownloadCallbackEvent;
        public void HttpWebRequestDownloadGet(string url)
        {
            
            Thread _thread = new Thread(delegate()
            {
                Uri _uri = new Uri(url, UriKind.RelativeOrAbsolute);
                HttpWebRequest _httpWebRequest = (HttpWebRequest)WebRequest.Create(_uri);
                 _httpWebRequest.Method="Get";
              
                _httpWebRequest.BeginGetResponse(new AsyncCallback(delegate(IAsyncResult result)
                {
                    HttpWebRequest _httpWebRequestCallback = (HttpWebRequest)result.AsyncState;
                    HttpWebResponse _httpWebResponseCallback = (HttpWebResponse)_httpWebRequestCallback.EndGetResponse(result);
                    Stream _streamCallback = _httpWebResponseCallback.GetResponseStream();

                    StreamReader _streamReader = new StreamReader(_streamCallback,new HtmlAgilityPack.Gb2312Encoding());
                    string _stringCallback = _streamReader.ReadToEnd();
                 
                    Deployment.Current.Dispatcher.BeginInvoke(new Action(() =>
                    {
                        if (DownloadCallbackEvent != null)
                        {
                            DownloadEventArgs _downloadEventArgs = new DownloadEventArgs();
                            _downloadEventArgs._DownloadStream = _streamCallback;
                            _downloadEventArgs._DownloadString = _stringCallback;
                            DownloadCallbackEvent(this, _downloadEventArgs);

                        }
                    }));

                }), _httpWebRequest);
            }) ;
            _thread.Start();
        }
       // }

O(∩_∩)O! 我这个比较复杂, 总之我们下载了html的数据就行了。  

贴一个简单的下载方式吧

WebClient webClenet=new WebClient();  

         webClenet.Encoding = new HtmlAgilityPack.Gb2312Encoding(); //加入这句设定编码  

         webClenet.DownloadStringAsync(new Uri("http://news.sina.com.cn/s/2011-11-25/120923524756.shtml", UriKind.RelativeOrAbsolute));       

         webClenet.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClenet_DownloadStringCompleted); 

 现在处理回调函数的 e.Result

 string _result = e._DownloadString;

            HtmlDocument _doc = new HtmlDocument(); //实例化HtmlAgilityPack.HtmlDocument对象
            _doc.LoadHtml(_result);         //载入HTML

            HtmlNode _htmlNode01 = _doc.GetElementbyId("artibodyTitle");  //新闻标题的Div
            string _title = _htmlNode01.InnerText;

            HtmlNode _htmlNode02 = _doc.GetElementbyId("artibody");     //获取内容的div  
            string _content = _htmlNode02.InnerText;
           // int _count= _htmlNode02.ChildNodes.Where(new Func<HtmlNode,bool>("div"));
            int _divIndex = _content.IndexOf(" .blkComment");

            _content= _content.Substring(0,_divIndex);

            #region 新浪标签
            HtmlNode _htmlNodo03 = _doc.GetElementbyId("art_source");
            string _www = _htmlNodo03.FirstChild.InnerText;
            string _wwwInt = _htmlNodo03.FirstChild.Attributes[0].Value;
            #endregion
            // string _source = _htmlNodo03;
            //_htmlNodo03.ChildNodes

            #region 发布时间
            HtmlNode _htmlNodo04 = _doc.GetElementbyId("pub_date");
            string _pub_date = _htmlNodo04.InnerText;
            #endregion


            #region 来源网站信息
            HtmlNode _htmlNodo05 = _doc.GetElementbyId("media_name");
            string _media_name = _htmlNodo05.FirstChild.InnerText;
            string _modia_source = _htmlNodo05.FirstChild.Attributes[0].Value;
            #endregion

            Media_nameHyperlinkButton.Content = _pub_date + " " + _media_name;
            Media_nameHyperlinkButton.NavigateUri = new Uri(_modia_source, UriKind.RelativeOrAbsolute);
            TitleTextBlock.Text = _title;
            ContentTextBlock.Text = _content;

 

结果如下图所示:

网页的大部分标签是没有ID属性的,不过幸运的是HtmlAgilityPack支持XPath

那就需要通过XPATH语言来查找匹配所需节点

XPath教程:http://www.w3school.com.cn/xpath/index.asp

 

案例下载:

http://115.com/file/dn87dl2d#
MyFramework_Test.zip

 

 

 

目录
相关文章
|
8天前
|
移动开发 前端开发 HTML5
Twaver-HTML5基础学习(20)数据容器(3)_数据的批量加载(节省性能方法)
本文介绍了Twaver HTML5中数据的批量加载方法,通过使用`box.startBatch()`可以在大量数据加载时提高性能。文章通过示例代码展示了如何在React组件中使用批量加载功能,以减少界面重绘次数并提升效率。
24 1
Twaver-HTML5基础学习(20)数据容器(3)_数据的批量加载(节省性能方法)
|
8天前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
24 1
数据解析之xpath 太6了
数据解析之xpath 太6了
|
8天前
|
XML 移动开发 JSON
Twaver-HTML5基础学习(18)数据容器(1)_增删查改、遍历数据容器、包含网元判断
本文介绍了Twaver HTML5中的数据容器(DataBox),包括如何进行增删查改操作、遍历数据容器以及判断网元是否存在于数据容器中。DataBox用于管理所有的网元对象,如ElementBox、LayerBox、AlarmBox等,并通过示例代码展示了其常用方法的使用。
21 1
Twaver-HTML5基础学习(18)数据容器(1)_增删查改、遍历数据容器、包含网元判断
|
8天前
|
移动开发 前端开发 HTML5
Twaver-HTML5基础学习(2)基本数据元素(Data)
本文介绍了Twaver HTML5中的基本数据元素,包括Data、Element、Alarm和Layer等,它们分别用来描述拓扑的网元、告警和图层。文章详细解释了Data类的基本属性和方法,并提供了如何在React组件中使用Twaver创建节点和连线的示例代码。
23 1
Twaver-HTML5基础学习(2)基本数据元素(Data)
|
10天前
|
存储 弹性计算 缓存
阿里云服务器ECS通用型实例规格族特点、适用场景、指标数据解析
阿里云服务器ECS提供了多种通用型实例规格族,每种规格族都针对不同的计算需求、存储性能、网络吞吐量和安全特性进行了优化。以下是对存储增强通用型实例规格族g8ise、通用型实例规格族g8a、通用型实例规格族g8y、存储增强通用型实例规格族g7se、通用型实例规格族g7等所有通用型实例规格族的详细解析,包括它们的核心特点、适用场景、实例规格及具体指标数据,以供参考。
阿里云服务器ECS通用型实例规格族特点、适用场景、指标数据解析
|
3天前
|
消息中间件 canal 关系型数据库
Maxwell:binlog 解析器,轻松同步 MySQL 数据
Maxwell:binlog 解析器,轻松同步 MySQL 数据
30 11
|
8天前
|
数据采集 存储 JavaScript
构建您的第一个Python网络爬虫:抓取、解析与存储数据
【9月更文挑战第24天】在数字时代,数据是新的金矿。本文将引导您使用Python编写一个简单的网络爬虫,从互联网上自动抓取信息。我们将介绍如何使用requests库获取网页内容,BeautifulSoup进行HTML解析,以及如何将数据存储到文件或数据库中。无论您是数据分析师、研究人员还是对编程感兴趣的新手,这篇文章都将为您提供一个实用的入门指南。拿起键盘,让我们开始挖掘互联网的宝藏吧!
|
1月前
|
数据采集 存储 JavaScript
如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取
在现代网页开发中,复杂的HTML结构给爬虫技术带来挑战。传统的解析库难以应对,而Cheerio和jsdom在Node.js环境下提供了强大工具。本文探讨如何在复杂HTML结构中精确提取数据,结合代理IP、cookie、user-agent设置及多线程技术,提升数据采集的效率和准确性。通过具体示例代码,展示如何使用Cheerio和jsdom解析HTML,并进行数据归类和统计。这种方法适用于处理大量分类数据的爬虫任务,帮助开发者轻松实现高效的数据提取。
如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取
|
8天前
|
移动开发 前端开发 JavaScript
Twaver-HTML5基础学习(3)基本数据元素(Data)其他功能函数以及组Group
本文介绍了Twaver HTML5中Data类的其他功能函数,如获取和操作子网元的方法,以及组(Group)的概念和使用。文章通过示例代码展示了如何在React组件中创建组、添加图元到组中,并通过toChildren函数获取满足特定条件的图元。
19 0
Twaver-HTML5基础学习(3)基本数据元素(Data)其他功能函数以及组Group

推荐镜像

更多
下一篇
无影云桌面