本程序使用Python 2.7.6编写,扩展了Python自带的HTMLParser,自动根据预设的股票代码列表,从Yahoo Finance抓取列表中的数据日期、股票名称、实时报价、当日变化率、当日最低价、当日最高价。
由于Yahoo Finance的股票页面中的数值都有相应id。
例如纳斯达克100指数ETF(QQQ)http://finance.yahoo.com/q?s=qqq
其中实时报价的HTML标记为
<span id="yfs_l84_qqq">87.49</span>
而标普500指数ETF(SPY)http://finance.yahoo.com/q?s=spy
其中实时报价的HTML标记为
<span id="yfs_l84_spy">187.25</span>
因此本数据抓取程序根据相应的id字符串来查找数据。具体来说就是先继承HTMLParser,然后在自定义的子类中重载handle_data(self, data)方法,查找包含相应id字符串(例如实时报价的id字符串为"yfs_l84_"+股票代码)的HTML标记,并输出这个HTML标记中的数据(例如qqq的<span id="yfs_l84_qqq">87.49</span>,其中的数据87.49就是实时报价。)
样本输出:
数据依次是
数据日期 股票代码 股票名称 实时报价 日变化率 日最低价 日最高价
05/05/2014 ibb iShares Nasdaq Biotechnology (IBB) 233.28 1.85% 225.34 233.28 05/05/2014 socl Global X Social Media Index ETF (SOCL) 17.48 0.17% 17.12 17.53 05/05/2014 pnqi PowerShares NASDAQ Internet (PNQI) 62.61 0.35% 61.46 62.74 05/05/2014 xsd SPDR S&P Semiconductor ETF (XSD) 67.15 0.12% 66.20 67.41 05/05/2014 ita iShares US Aerospace & Defense (ITA) 110.34 1.15% 108.62 110.56 05/05/2014 iai iShares US Broker-Dealers (IAI) 37.42 -0.21% 36.86 37.42 05/05/2014 vbk Vanguard Small Cap Growth ETF (VBK) 119.97 -0.03% 118.37 120.09 05/05/2014 qqq PowerShares QQQ (QQQ) 87.95 0.53% 86.76 87.97 05/05/2014 ewi iShares MSCI Italy Capped (EWI) 17.86 -0.56% 17.65 17.89 05/05/2014 dfe WisdomTree Europe SmallCap Dividend (DFE) 62.33 -0.11% 61.94 62.39 05/05/2014 pbd PowerShares Global Clean Energy (PBD) 13.03 0.00% 12.97 13.05 05/05/2014 eirl iShares MSCI Ireland Capped (EIRL) 38.52 -0.16% 38.39 38.60
本程序源代码:
https://bitbucket.org/lsz/html-parser
HTMLParser的官方说明文档:
https://docs.python.org/2/library/htmlparser.html
HTMLParser(解析HTML文档元素)
http://blog.csdn.net/hxsstar/article/details/17241709