解析html和采集网页的神兵利器

HtmlAgilityPack是一个基于.Net的、第三方免费开源的微型类库,主要用于在服务器端解析html文档(在B/S结构的程序中客户端可以用Javascript解析html)。截止到本文发表时,HtmlAgilityPack的最新版本为1.4.0。下载地址:http://htmlagilitypack.codeplex.com/

下载后解压缩后有3个文件,这里只需要将其中的HtmlAgilityPack.dll(程序集)、HtmlAgilityPack.xml(文档,用于Visual Studio 2008中代码智能提示和帮助说明之用)引入解决方案中即可使用,无需安装任何东西,非常“绿色环保”。

在C#类文件开头引入using HtmlAgilityPack;就可以使用该命名空间下的类型了。实际使用中,几乎都是以HtmlDocument类为主线的,这一点非常类似于微软.net framework中的XmlDocument类。XmlDocument类是操作的是xml文档,而HtmlDocument类操作的是html文档(其实也可以操作xml文档),它们的操作方式都是基于Dom,所不同的是后者取消了诸如GetElementsByTagName这样的方法,强化了GetElementById方法(在HtmlDocument中可以直接使用,而XmlDocument则不可以)。HtmlAgilityPack中定位节点基本上都用Xpath表达式,Xpath表达式的参考文档可见:http://www.w3school.com.cn/xpath/xpath_syntax.asp

例如,我们要采集博客园首页推荐文章的标题,在ASP.NET中可以编写如下代码:

[csharp] view plaincopy

  1. HtmlWeb htmlWeb = new HtmlWeb();
  2. HtmlDocument htmlDoc = htmlWeb.Load(@"http://www.cnblogs.com/");
  3. HtmlNodeCollection anchors = htmlDoc.DocumentNode.SelectNodes(@"//a[@class=‘titlelnk‘]");
  4. foreach (HtmlNode anchor in anchors)
  5. Response.Write(anchor.InnerHtml + "<br/>");
  6. Response.End();

这段代码将采集到的首页html静态文本解析成Dom节点树,然后用Xpath表达式获取整个文档中class属性值为titlelnk的所有a元素。获取节点最常用节点对象的两个方法:SelectNodes("xpath表达式")和SelectSingleNode("xpath表达式"),前者返回节点集合HtmlNodeCollection的一个实例;后者返回满足条件的第一个节点,类型为HtmlNode的一个实例。后面的Foreach循环输出每个a元素的内联文本。

通常情况下,HtmlAgilityPack比正则表达式解析html更加高效准确,这体现在开发效率和运行性能两方面。HtmlAgilityPack的灵活性也是非常好的。例如将上面代码中的foreach循环体改成Response.Write(anchor.OuterHtml + "<br/>");则输出的是超链接本身而非内联文本。甚至可以修改超链接本身:

[csharp] view plaincopy

  1. foreach (HtmlNode anchor in anchors)
  2. {
  3. anchor.Attributes.Add("style", "color:red");
  4. Response.Write(anchor.OuterHtml + "<br/>");
  5. }

这样运行后你看到的是红色的超链接。你可以几乎随心所欲地对HtmlAgilityPack解析生成的Dom节点树上的节点操作,就像你拥有一颗自己的圣诞树,可以随意对其修整剪裁。这也是正则方法无法相提并论的。HtmlAgilityPack对源文本的结构要求非常宽松,即使没有根元素也一样正常使用,这同要求非常严格的XmlDocument完全不同。熟练掌握HtmlAgilityPack解析html文档的关键在于熟悉Xpath表达式语法,好在Xpath的语法入门比较简单,只需花费数个小时基本就可满足大部分应用。依托于Dom高效而通用的结构,Xpath强大而简练的语法,HtmlAgilityPack真可以称为“解析html和采集网页的神兵利器”。

时间: 2024-08-04 18:20:40

解析html和采集网页的神兵利器的相关文章

java微信开发API解析(七)-网页开发-微信网页授权

java微信开发API解析(七)-网页开发-微信网页授权 全局说明 * 详细说明请参考前两篇文章. 本文说明 本文主要完成获取用户基本信息的工作,包括(昵称.头像.地址.国家等基本信息) 对于snsapi_base和snsapi_userinfo我们只演示关于snsapi_userinfo.因为snsapi_userinfo更难,如果能够理解snsapi_userinfo,那么snsapi_base不在话下. 对于该部分(微信网页开发)我们只介绍如何获取用户基本信息,对于开发样式库,js-SDK

前嗅ForeSpider教程:采集网页链接/源码/时间/重定向地址等

第一步:新建任务①点击左上角"加号"新建任务,如图1:[图1]②弹窗里填写采集地址,任务名称,如图2:[图2]③ 点击下一步,勾选抽取链接,选择网页内所有链接,如图3:[图3]④完成后模板抽取配置列表有一个模板,默认模板.默认模板下自动生成一个链接抽取,名称为网页全部链接,如4:[图4]第二步:创建新的模板,并新建数据抽取①模板配置,点击"新建模板"按钮,得到新建模板,如图5.[图5]②新建数据抽取.直接点击模板二,点击上面"新建数据抽取"按钮,

不需要编程,你也可以灵活采集网页数据

互联网中的数据是海量的,然而大数据的重点并不在"大",而在于"有用"."如何自动高效地采集互联网中我们需要的数据信息并为我们所用?"这是一个重要的问题!而爬虫技术就是为了解决这些问题而生的. 什么是网络爬虫? 网络爬虫是模拟客户端发生网络请求,接收请求响应,一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.它们可以自动采集所有其能够访问到的页面内容,以获取或更新这些网站的内容或检索方式. 网络爬虫的原理过程 1.发起请求通过HTTP库向目标

能Ping通,能DNS解析,不能打开网页(登陆QQ等)的解决办法

悲了个催,昨天的一次意外断电关机,导致操作系统再也无法访问Internet,具体表现为: 1.Ping地址正常,能ping通任何本来就可以ping通地址,如网关.域名. 2.能DNS解析域名. 3.无法打开网页,感觉是网页打开的一瞬间就显示无网络连接. 4.只需要连接ip地址.无需dns接些的程序都是无法连接,如QQ. 折腾了很久,通过重启路由.sfc修复命令.重装驱动.更换网络等方式修复均无果,郁闷了,只好启动很久以前安装在移动硬盘中的备用系统,结果发现在该系统下,网络正常.不知怎么的想起很久

采集网页数据生成到静态模板newslist.html文件中(正则表达式)

采集数据源:http://www.sgcc.com.cn/xwzx/gsyw/ //根据URL地址获取所有html public static string GetUrltoHtml(string Url, string type) { try { System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url); // Get the response instance. System.Net.WebResponse wResp =

如何在#神箭手云爬虫#上采集网页数据并发布到WeCenter

  云采集使用教程(发布到WeCenter) 1. 注册账号 打开神箭手官网(http://www.shenjianshou.cn/),注册一个账号: 2.获取采集规则 点击官网首页右上角的“云市场”,在市场里免费获取采集规则: 3.采集数据 1)         进入“管理控制台”: 2)         新建任务(“我的任务”->“创建爬虫任务”->选择刚获取的规则(模板)->“下一步”): 3)         完成任务配置,点击“保存”,系统会自动跳转到任务详情页: 4)    

如何采集网页数据并发布到Discuz

1. 注册账号 打开神箭手官网(http://www.shenjianshou.cn/),注册一个账号: 2.获取采集规则 点击官网首页右上角的“云市场”,在市场里免费获取采集规则: 3.采集数据 1)         进入“管理控制台”: 2)         新建任务(“我的任务”->“创建爬虫任务”->选择刚获取的规则(模板)->“下一步”): 3)         完成任务配置,点击“保存”,系统会自动跳转到任务详情页: 4)         点击右上角的“启动”,采集任务便立即

Shell 命令 curl 和 wget 使用代理采集网页的总结大全

Linux Shell 提供两个非常实用的命令来爬取网页,它们分别是 curl 和 wget 米扑代理,作为大数据分析研究的基础服务,对其做了深入的研究和总结. curl 和 wget 使用代理 curl 支持 http.https.socks4.socks5 wget 支持 http.https Shell curl wget 示例 #!/bin/bash # # curl 支持 http.https.socks4.socks5 # wget 支持 http.https # # 米扑代理示例:

java基础71 XML解析相关知识点(网页知识)

1.xml解析的含义 xml文件除了给开发者看,更多情况下是使用程序读取xml文件中的内容 2.XML的解析方式 DOM解析    SAX解析 3.xml的解析工具 3.1.DOM解析工具 1.JAXP(oracle-Sun公司官方)    2.JDOM工具(非官方)    3.Dom4j工具(非官方的). 三大框架(默认读取xml的工具就是DOM4j) 3.2.SAX解析工具 1.Sax解析工具(oracle-Sun公司官方) 4.XML的解析原理 4.1.DOM解析的原理 xml解析器一次性