C#+HtmlAgilityPack+XPatSF传奇网页版h带你采集数据(以采集天气数据为例子)
作者:私服传奇网页版 来源:www.szlyw.com.cn 点击:172
第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel,是真尼玛的累,虽然那个时候C#还很菜,也想能不能通过程序来批量获取(所以平时想法要多才好)。几经周折,终于发现了HtmlAgilityPack神器,这几年也用HtmlAgilityPack采集了很多类型数据,特别是足球赛事资料库的数据采集以及天气数据采集,都是使用HtmlAgilityPack,所以把自己的使用过程总结下来,分享给大家,让更多人接触和学会使用,给自己的工作带来遍历。
今天的主要内容是HtmlAgilityPack的基本介绍、使用,实际代码。最后我们以采集天气数据为例子,来介绍实际的采集分析过程和简单的代码。我们将在下一篇文章中开源该天气数据库和C#操作代码。采集核心就只是在这里介绍,其实核心代码都有了,自己加工下就可以了,同时也免费对有需要的人开放。至于具体详情,请关注下一篇文章。
.NET开源目录:【目录】本博客其他.NET开源项目文章目录
本文原文地址:C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)
1.HtmlAgilityPack简介HtmlAgilityPack是一个开源的解析HTML元素的类库,最大的特点是可以通过XPath来解析HMTL,如果您以前用C#操作过XML,那么使用起HtmlAgilityPack也会得心应手。目前最新版本为1.4.6,下载地址如下: 目前稳定的版本是1.4.6,上一次更新还是2012年,所以很稳定,基本功能全面,也没必要更新了。
提到HtmlAgilityPack,就必须要介绍一个辅助工具,不知道其他人在使用的时候,是如何分析页面结构的。反正我是使用官方提供的一个叫做HAPExplorer的工具。非常有用。下面我们在使用的时候会介绍如何使用。
2.XPath技术介绍与使用 2.1 XPath介绍XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初 XPath 的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。但是 XPath 很快的被开发者采用来当作小型查询语言。
XPath是W3C的一个标准。它最主要的目的是为了在XML1.0或XML1.1文档节点树中定位节点所设计。目前有XPath1.0和XPath2.0两个版本。其中Xpath1.0是1999年成为W3C标准,而XPath2.0标准的确立是在2007年。W3C关于XPath的英文详细文档请见: 。
2.2 XPath的路径表达XPath是XML的查询语言,和SQL的角色很类似。以下面XML为例,介绍XPath的语法。下面的一些资料是几年前学习这个的时候,从网络以及博客园获取的一些资料,暂时找不到出处,例子和文字基本都是借鉴,再次谢过。如果大家发现类似的一起文章,告诉我链接,我加上引用。下面的Xpath的相关表达也很基础,基本足够用了。
<?xml version="1.0"encoding="ISO-8859-1"?> <catalog> <cd country="USA"> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> <price>10.90</price> </cd> </catalog>
定位节点:XML是树状结构,类似档案系统内数据夹的结构,XPath也类似档案系统的路径命名方式。不过XPath是一种模式(Pattern),可以选出XML档案中,路径符合某个模式的所有节点出来。例如要选catalog底下的cd中所有price元素可以用:
/catalog/cd/price
如果XPath的开头是一个斜线(/)代表这是绝对路径。如果开头是两个斜线(//)表示文件中所有符合模式的元素都会被选出来,即使是处于树中不同的层级也会被选出来。以下的语法会选出文件中所有叫做cd的元素(在树中的任何层级都会被选出来)://cd
选择未知的元素:使用星号(*)可以选择未知的元素。下面这个语法会选出/catalog/cd的所有子元素:
/catalog/cd/*
以下的语法会选出所有catalog的子元素中,包含有price作为子元素的元素。
/catalog/*/price
以下的语法会选出有两层父节点,叫做price的所有元素。
/*/*/price
要注意的是,想要存取不分层级的元素,XPath语法必须以两个斜线开头(//),想要存取未知元素才用星号(*),星号只能代表未知名称的元素,不能代表未知层级的元素。
选择分支:使用中括号可以选择分支。以下的语法从catalog的子元素中取出第一个叫做cd的元素。XPath的定义中没有第0元素这种东西。
/catalog/cd[1]
以下语法选择catalog中的最后一个cd元素:(XPathj并没有定义first()这种函式喔,用上例的[1]就可以取出第一个元素。
/catalog/cd[last()]
以下语法选出price元素的值等于10.90的所有/catalog/cd元素
/catalog/cd[price=10.90]
选择属性:在XPath中,除了选择元素以外,也可以选择属性。属性都是以@开头。例如选择文件中所有叫做country的属性:
//@country
以下语法选择出country属性值为UK的cd元素
//cd[@country='UK']
3.采集天气网站案例 3.1 需求分析我们要采集的是全国各地城市的天气信息,网站为:,该网站数据分为2种类型,1个是历史数据,覆盖范围为2011年至今,1个是天气预报的数据,历史数据是天气后报,也就是实际的天气数据。采集的范围必须覆盖全国主要城市,最好是所有的城市。通过分析该网站的页面,的确是满足要求。天气信息,包括实际的天气状况,风力状况以及气温状况情况,包括最低和最高区间。
结合基本要求,我们进入网站,分析一些大概特点,以及主要页面的结构。
3.2 网站页面结构分析 ……点击排行
- 美媒担忧中美发生太空战美或被打回二战时代
- 魔兽一周囧闻:小阿回来,小沈阳
- 绿甲并非坦克首选:魔抗装到底该怎么出
- 有大翅膀的王大锤 韩服DNF圣职者二觉开放
- 无锡三位绣娘拜师顾青蛟 再接再厉让锡绣流传
- 新大话2:新专利减少排队时间 移动版研发中
- 《传奇页游SF4》完全流程攻略一(PS2)
- 玩玩手机版传奇sf变态版下载【官方安卓版】
- Yallacompare将利用区块链及3D打印技术跨界打造完全自动驾驶汽车
- 习近平举行仪式欢迎传奇sf网页游戏厄瓜多尔总统访华并同其举行会
- 美华裔警察执勤时开轻变私服传奇枪打死偷车嫌疑人 却被起诉了
- “历史的记忆”展超变态传奇私服览记载中美共同抗击侵略者事迹
- 望海楼:擦清超变态传奇私服历史镜子 走好未来的路
- 刘诗诗王千源《网页版SF传奇》什传奇私服么时候播出? 《 网页版
- SF传奇网页游戏好友超变态私服传奇组队模式怎么玩?高手速成攻略
最新更新的文章
- 美媒担忧中美发生太空战美或被打回二战时代
- 魔兽一周囧闻:小阿回来,小沈阳
- 绿甲并非坦克首选:魔抗装到底该怎么出
- 有大翅膀的王大锤 韩服DNF圣职者二觉开放
- 无锡三位绣娘拜师顾青蛟 再接再厉让锡绣流传
- 新大话2:新专利减少排队时间 移动版研发中
- 《传奇页游SF4》完全流程攻略一(PS2)
- 玩玩手机版传奇sf变态版下载【官方安卓版】
- Yallacompare将利用区块链及3D打印技术跨界打造
- 习近平举行仪式欢迎传奇sf网页游戏厄瓜多尔总统
- 美华裔警察执勤时开轻变私服传奇枪打死偷车嫌疑
- “历史的记忆”展超变态传奇私服览记载中美共同
- 望海楼:擦清超变态传奇私服历史镜子 走好未来的
- 刘诗诗王千源《网页版SF传奇》什传奇私服么时候
- SF传奇网页游戏好友超变态私服传奇组队模式怎么