本程序使用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