zoukankan      html  css  js  c++  java
  • Jumony入门(三)初探解析器

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

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

    系列目录:

    Jumony入门(一)从这里开始

    Jumony入门(二)初识选择器

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

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

    首先在项目中添加一个aspx文件,然后在上面放一个DataGrid来展示我们一会儿要抓取的成果,像是这样:

    imageimage

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

    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,我们能做的好玩的事情,要比这些邪恶的事情多多了不是么?

    谢谢大家。

  • 相关阅读:
    TensorFlow笔记-初识
    SMP、NUMA、MPP体系结构介绍
    Page Cache, the Affair Between Memory and Files.页面缓存-内存与文件的那些事
    How The Kernel Manages Your Memory.内核是如何管理内存的
    Anatomy of a Program in Memory.剖析程序的内存布局
    Cache: a place for concealment and safekeeping.Cache: 一个隐藏并保存数据的场所
    Memory Translation and Segmentation.内存地址转换与分段
    CPU Rings, Privilege, and Protection.CPU的运行环, 特权级与保护
    The Kernel Boot Process.内核引导过程
    How Computers Boot Up.计算机的引导过程
  • 原文地址:https://www.cnblogs.com/sunshinexiaobin/p/3188766.html
Copyright © 2011-2022 走看看