Jumony入门(三)初探解析器

首先介绍一下Jumony是什么,Jumony是一个.NET的开源项目,项目主页位于:http://jumony.codeplex.com/,采用LGPL协议发布。html

Jumony试图提供在传统Web开发模型中许多难以解决问题的解决方案。一言蔽之,Jumony的一切基础创建在服务器端的HTML DOM之上。在服务器端将HTML(文件或动态网页技术的输出)按照客户端浏览器的处理方式解析为HTML DOM。操纵和处理HTML DOM,就像咱们在客户端用JavaScript干的那些事情同样,不一样的是,Jumony可使你依托强大的.NET Framework,来解决之前用脚本和服务器端技术都难以解决的事情。浏览器

系列目录:服务器

Jumony入门(一)从这里开始ide

Jumony入门(二)初识选择器学习

 

这是系列文章的第三篇,这个系列尝试一步步从一些最简单的例子开始了解怎么玩转Jumony。建议先从第一篇开始学习搭建Jumony环境,在本文的开始的时候,假设你们已经搭建好了Jumony的运行环境。网站

 

这一次我要谈到Jumony的HTML解析器,显然我本身写的简单的符合规范的HTML并不能说明解析器的功能。因此这一次我直接从互联网上随便抓一个页面来完成示范。ui

 

首先在项目中添加一个aspx文件,而后在上面放一个DataGrid来展现咱们一下子要抓取的成果,像是这样:code

imageimage

 

那么接下来,咱们到Code Behind里面来添加一些代码,首先是要下载一个互联网的页面,我用新浪的首页来作示范,事实上你也能够换成任何你喜欢网站(例如博客园),下载网页最简单的方式固然是WebClient,不过记得添加using System.Net哦,同时我也把Jumony的一些引用都添加上了,像这样:htm

image

 

而后建立JumonyParser的实例,并调用其Parse方法将html分析成一个IHtmlDocument:对象

image

Jumony Milestone 1除了提供Jumony Parser分析HTML文档以外,还能够把HtmlAgilityPack分析的文档转换成Jumony的标准DOM模型。这使得HtmlAgilityPack也能够看成Jumony的一个Parser来使用,下面的代码展现了这一点:

image

不过,这么作以前要确保你引用了Ivony.Web.Html.HtmlAgilityPackAdaptor命名空间,AsDocument扩展方法即是在其中定义的。

HtmlAgilityPackAdaptor为HtmlAgilityPack的DOM对象提供了一个适配器,使得其能够知足Jumony标准DOM的要求,从而使用Jumony的方法来操做。理论上全部的HTML DOM和Parser均可以经过适配项目与Jumony适配。

 

这两种HTML Parser各有优劣,你们能够任选一种来完成这一次的例子。在这里我使用Jumony Parser来继续下面的例子。

分析了新浪的首页后,接下来就要干坏事了,首先把新浪首页上全部的连接所有取出来。因为连接都是<a>定义的,因此简单的用Find( "a" )就能够选择出来。但<a>除了能够定义连接,还能够定义锚点,咱们并不须要取出页面上的锚点。因此咱们用"a[href]",即包含href属性的a标签:

image

而后咱们分析这些连接,将其目标URL取出来(即href属性),因为href多是一个相对连接,因此咱们用页面的地址 "http://www.sina.com.cn/" 做为基地址,从新计算出绝对的URL,而后我用LINQ表达式来对全部URL完成这样的操做,再放在一个匿名对象中:

image

能够看得出来,这些工做在服务器端完成的时候,是多么的简洁流畅,一鼓作气。若是在客户端来完成这种事情,没有强大的.NET Framework做为后盾,一个简单的URL计算就能够难倒无数英雄好汉。

 

而后再为匿名对象添加一些其余有趣的属性,对连接排序,最后绑定到DataGrid上,最终的代码像这样:

image

因为DataGrid有自动生成列的特性,因此咱们并不须要作些什么,它会自动的弄一个表格来展示这些数据,效果像是这样:

imageimage

 

把抓取的网页换成博客园首页:

image

 

写在最后

Jumony的确能够用来干各类各样的坏事,譬如说抓取页面,分析数据,或是新闻小偷什么的。从这一点来讲,你能够说Jumony是邪恶的,但软件原本就是邪恶的,Jumony将一些很复杂的事情,提供了简单的解决方案,也许,这下降了干坏事的成本,但更多的时候,Jumony带来了生产力的飞跃。借助Jumony,咱们能作的好玩的事情,要比这些邪恶的事情多多了不是么?

谢谢你们。

相关文章
相关标签/搜索