easyquotation:實時股票數據獲取
easyquotation庫,是一個非常好用的實時股票數據獲取庫,可以實時獲取新浪、騰訊的免費股票行情,集思路的分級基金行情
安裝
項目地址:https://github.com/shidenggui/easyquotation.git
pip install easyquotation
用法
import easyquotationquotation = easyquotation.use('sina') # 新浪 ['sina'] 騰訊 ['tencent', 'qq'] #獲取所有股票行情
quotation.market_snapshot(prefix=True) # prefix 參數指定返回的行情字典中的股票代碼 key 是否帶 sz/sh 前綴#獲取單支股票
quotation.real('162411') # 支持直接指定前綴,如 'sh000001'#獲取多支股票
quotation.stocks(['000001', '162411']) #同時獲取股票和行情
quotation.stocks(['sh000001', 'sz000001'], prefix=True) #獲取集思路行情
quotation = easyquotation.use('jsl') # ['jsl']
quotation.set_cookie('從瀏覽器獲取的集思錄 Cookie')
quotation.funda() # 參數可選擇利率、折價率、交易量、有無下折、是否永續來過濾
quotation.fundb() # 參數如上#獲取騰訊分時圖數據
quotation = easyquotation.use("timekline")
data = quotation.real(['603828'], prefix=True)#獲取日k數據
quotation = easyquotation.use("daykline")
data = quotation.real(['00001','00700'])#獲取港股數據
quotation = easyquotation.use("hkquote")
data = quotation.real(['00001','00700'])
bug
獲取港股數據,easyquotation傳數字股票代碼沒問題,如果獲取指數數據如恒生指數(HSI),傳入HSI后,返回數據為空,bug原因是返回的response封裝,正則表達式只匹配了數字,所以傳入字母代碼后沒有進行封裝。
代碼bug
在easyquotation庫的HKQuote類中,format_response_data函數的正則表達式:r’v_r_hk\d+=“.*?”',\d匹配了數字股票代碼,港股的指數代碼是字母的,所以將\d改成 .
def format_response_data(self, rep_data, **kwargs):stocks_detail = "".join(rep_data)stock_dict = {}for raw_quotation in re.findall(r'v_r_hk\d+=".*?"', stocks_detail):quotation = re.search('"(.*?)"', raw_quotation).group(1).split("~")stock_dict[quotation[2]] = dict(lotSize=float(quotation[0]),name=quotation[1],price=float(quotation[3]),lastPrice=float(quotation[4]),openPrice=float(quotation[5]),amount=float(quotation[6]),time=quotation[30],dtd=float(quotation[32]),high=float(quotation[33]),low=float(quotation[34]),)return stock_dict
bug修改方式
繼承HKQuote類,重寫format_response_data函數,然后如果要獲取港股數據,使用自己的類
import re
from easyquotation.hkquote import HKQuoteclass IHKQuote(HKQuote):def format_response_data(self, rep_data, **kwargs):stocks_detail = "".join(rep_data)stock_dict = {}for raw_quotation in re.findall(r'v_r_hk.+=".*?"', stocks_detail):quotation = re.search('"(.*?)"', raw_quotation).group(1).split("~")stock_dict[quotation[2]] = dict(lotSize=float(quotation[0]),name=quotation[1],price=float(quotation[3]),lastPrice=float(quotation[4]),openPrice=float(quotation[5]),amount=float(quotation[6]),time=quotation[30],dtd=float(quotation[32]),high=float(quotation[33]),low=float(quotation[34]),)return stock_dict
調用方式
from amend_easyquotation import IHKQuotequotation = IHKQuote()
stock = quotation.stocks(['HSI'])