应用范例:解析 Yahoo 奇摩股市的各档股票资讯-HtmlAgilityPack

笔者认为这应该是很多撰写股市资料收集的应用程式的主要标的,若是要由证交所取得资料授权可能要一笔费用,但是由 Yahoo 奇摩股市中解析并读取资料是免费的,只是 Yahoo 奇摩股市的 HTML 结构长久以来都是鬆散型的,不像 W3C 是 XHTML(之前使用 HTML Agility Pack 读取是要展示它的功能),所以要剖析它需要花不少脑力,现在我们可以使用 HTML Agility Pack 来将这个工作简化。

在 Yahoo 奇摩股市中,一个个股的资讯是这样:

而它的 HTML 结构则是:

因此如果我们要使用 XPath 来解读它,则需要先使用下列 XPath 先到达上层 table 的位置,再往下取得 HTML 中的内容:

[XPath]

因此我们可以撰写下列的程式码:

读取 Yahoo 奇摩个股资料的程式码(专案类型:主控台应用程式)

NOTE

目前 HTML Agility Pack 预设编码应是法文编码,所以如果是读取中文 HTML 内容的话,无法直接使用 HtmlDocument.LoadHtml() 方法,而要透过 MemoryStream 使用 HtmlDocument.Load() 方法,才可以指定中文的编码。

有了这个读取程式后,笔者认为可以做的事就很多了,像是将它以 XSLT 转换成不同的 HTML 来显示,或是存到资料库中做其他的工作(分析或是图表输出等都可以做到)。

由上列程式可以看出,HTML Agility Pack 的使用其实就和 XML DOM 的使用差不了多少,而且也不用再去写不具亲和力的 Regular Expression 的指令,就可以轻鬆的使用 XPath 来解析 HTML,就算是鬆散的 HTML 也可以解析。
NOTE

虽然 HTML Agility Pack 可以解析成功鬆散的 HTML 文件内容,但是请注意,鬆散的 HTML 内容可能会造成 HtmlNode 不是预期的结果,或是在解析表格时,档头和内容不同步的现象,这个部份开发人员可能需要多加注意。

 

NOTE

HTML Agility Pack 也可以用来动态产生 HTML 的内容,就如同 XmlDocument 产生 XML 文件内容一样,它也有像是 CreateElement()、CreateAttribute()、CreateComments() 与 CreateTextNode() 等方法,其使用方式与 XmlDocument 不多,因此笔者在此就不赘述,请参考: http://msdn.microsoft.com/zh-tw/library/t058x2df.aspx

WARNING

本范例程式仅以 Yahoo 奇摩作为范例标的,实际上若要应用时请注意其内容授权合约与免责条款,笔者仅以此范例展示 HTML Agility Pack 的功能,并不代表使用此范例即等同获得 Yahoo 奇摩的内容授权,若要引用则请注意是否有合法的内容授权,如因引用范例程式而导致侵权问题,一切责任由引用者自负。

 


辅助工具
HTML Agility Pack 本身有提供一个 HAP Explorer 的工具,可以让开发人员可以很快的得知要使用的 XPath 语法,以利开发人员利用它来解析 HTML 的位置资讯。

不过笔者认为这套工具太过於阳春(也许 Simon Mourier 对 Windows Forms 或 WPF 不熟),因此笔者建议配合像 FireFox 或是 IE8 所提供的开发者工具(Developer Tools)来自行建构 XPath 会比较适合,而且它们也都提供可以圈选网页的某一个部份并标示其 HTML 位置的能力,这样要建构 XPath 也会比较快。

摘扖網絡:http://msdn.microsoft.com/zh-tw/ee787055.aspx

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值