股票數據爬蟲進階:免費、開源的股票爬蟲Python庫,實測真香


更多精彩內容,歡迎關注公眾號:數量技術宅,也可添加技術宅個人微信號:sljsz01,與我交流。

免費、開源的股票爬蟲Python庫:Easyquotation

我們在此前的文章中,向大家分享了如何用Python爬蟲,從新浪財經獲取實時的股票數據:(文章鏈接)。本期文章,我們將介紹一個股票數據爬蟲的進階工具:一個叫做Easyquotation的Python三方庫,這個py三方庫內置了爬取多個不同的股票數據源的功能,數據源包括:

  1. 新浪財經:全部A股實時行情(snapshot)

  2. 集思錄:分級基金、ETF、QDII實時數據

  3. 騰訊財經:A股日內分時行情、港股日k線行情、港股實時行情(snapshot)

新浪財經的實時行情,我們不再贅述。對於集思錄,這是一個提供側重債息相關的投資品種,例如新股、可轉債、分級基金、債券、封閉基金、QDII、ETF、LOF 等資產標的數據的專業平台,投資者可以通過集思錄數據,分析理論價值及其偏差,找到各種低風險的套利機會,而Easyquotation支持我們從集思錄上爬取其公布的數據,進而可以使用Python跟蹤套利機會。對於騰訊財經,它不僅提供A股的日內行情,還提供港股的日K線數據以及實時行情數據,對於有港股交易需求的朋友來說,爬取騰訊財經的免費港股數據,不失為一個經濟的方案。

使用准備

接下來,我們介紹在使用Easyquotation前,需要做的准備工作,大致可以分為兩步:

首先,我們需要安裝Requests三方庫。Requests庫可以說是所有爬蟲的”標配“,Requests是用python語言基於urllib編寫的,采用的是Apache2 Licensed開源協議的HTTP庫。與urllib相比,Requests更加方便,可以節約我們大量的工作。由於easyquotation的爬蟲依賴Requests庫,所以我們必須先確保電腦中安裝好Requests庫。

第二步,安裝Easyquotation。Easyquotation有兩種安裝方式,我們既可以通過pip install的方式進行一鍵安裝,也可也從github上clone對應的庫文件,進行手工安裝。安裝完Easyquotation庫,我們就可以開始使用它了。

簡要介紹

在實測代碼使用Easyquotation之前,我們先對其主體邏輯,做一個簡單介紹:

首先,Easyquotation的Api提供了一個入口,允許我們在使用時,選擇爬取哪個數據源,Easyquotation支持的數據源包括:新浪、集思錄、騰訊以及中國銀行(匯率),中國銀行的數據源主要為了讀取美元人民幣等主流外匯的匯率,我們平時用的比較少,所以文章重點介紹前3個爬蟲數據源的使用:新浪財經、集思錄、騰訊財經。

其次,Easyquotation有一個名為Basequotation基類,這個基類大家不需要特別理解它的技術細節,只需要知道它的總體功能,包括兩方面:一是定義爬蟲獲取數據的基礎函數,二是創建查詢線程池。

最后,是各個擴展子類,子類有三大功能:繼承基類函數、重載自定義行情源、接收數據的處理函數。而我們后續要做的實測,就是將子類進行實例化。比如我們用新浪財經的爬蟲數據,就是實例化Sina的子類,而如果我們用集思錄的爬蟲數據,就是實例化jsl的子類,其他子類,皆可以此類推。

實測:新浪財經爬蟲

示例1:新浪財經爬取全市場股票實時數據(snapshot)。Easyquotation中有一個好用的方法market_snapshot,可以用一個函數爬取到滬深兩市所有股票的實時數據(snapshot)。

import easyquotation
quotation = easyquotation.use('sina')
Res_Sina_AllSnap = quotation.market_snapshot(prefix=True)

示例2:獲取交易所上市ETF的實時Ticker數據,調用real方法,我們以513050中概互聯為例,獲取到該ETF相應的Ticker,具體字段參見運行結果截圖。

Res_Sina_stock = quotation.real('513050')

示例3:獲取個股實時Ticker數據,調用stocks方法,該方法支持同時獲取多個個股,采用逗號分隔的形式,例如我們同時獲取600519、601888的實時Ticker數據,返回的字段與ETF的Ticker數據字段相同。

Res_Sina_stocks = quotation.stocks(['600519', '601888'])

示例4:獲取交易所指數的實時Ticker數據,同樣調用stocks方法,同樣支持同時獲取多個指數,仍采用逗號分隔的形式,我們這里實時獲取sh000001上證指數、sz000001深圳綜指的Ticker數據。需要注意的是,由於指數不存在盤口,所以此時返回的bid、ask數據都為0。

Res_Sina_index = quotation.stocks(['sh000001', 'sz000001'], prefix=True)

實測:集思錄爬蟲

我們再繼續測試集思錄的爬蟲,我們通過jsl子類的實例化,並依次調用funda、fundb、qdii、etfindex,分別獲取到集思錄整理的分級A、分級B、QDII以及ETF的數據。再將這些數據轉換為標准的DataFrame格式,方便我們查看數據字段與數據內容。實現代碼、數據字段如下:

quotation = easyquotation.use('jsl')
Res_Jsl_fja = quotation.funda()
Res_Jsl_fjb = quotation.fundb()
Res_Jsl_qd = quotation.qdii()
Res_Jsl_etf = quotation.etfindex()
df_Jsl_fja = pd.DataFrame.from_dict(Res_Jsl_fja, orient='index')
df_Jsl_fjb = pd.DataFrame.from_dict(Res_Jsl_fjb, orient='index')
df_Jsl_qd = pd.DataFrame.from_dict(Res_Jsl_qd, orient='index')
df_Jsl_etf = pd.DataFrame.from_dict(Res_Jsl_etf, orient='index')

分級A數據字段

分級B數據字段

ETF數據字段

QDII數據字段

實測:騰訊財經爬蟲

騰訊財經爬蟲是三個股票數據爬蟲中,功能最強大的。騰訊財經能夠獲取到新浪財經所沒有的A股日內分時數據、港股日線數據、以及港股日內數據。

示例1:A股日內分時圖

我們通過騰訊財經,可以獲取到A股個股當日的完整分時數據,從而畫出該股票的日內分時圖,有了分時數據,我們可以利用分時數據,做我們想要的日內指標、進出場點位的計算。

在下面的代碼中,我們仍然以600519貴州茅台為例,通過real方法獲取股票日內分時數據,並將分時圖用Python繪圖工具繪制出來。

quotation = easyquotation.use("timekline")
querycode = '600519'
Res_tx_mindata = quotation.real([querycode], prefix=True)
querykey = 'sh' + querycode + '.js'
mindata = pd.DataFrame(Res_tx_mindata[querykey]['time_data'], columns=['time', 'close', 'volume'])
mindata['close'] = mindata['close'].map(lambda x: float(x))
mindata['volume'] = mindata['volume'].map(lambda x: int(x))
fig, ax = plt.subplots(1, 1)
ax_sub = ax.twinx()  # 共享x軸,生成次坐標軸
l1, = ax.plot(mindata.time, mindata.close, 'r-', label='price')
l2, = ax_sub.plot(mindata.time, mindata.volume, 'b-', label='volume')
plt.legend(handles=[l1, l2], labels=['price', 'volume'], loc=0)
ax.set_ylabel('price')
ax_sub.set_ylabel('volume')
ax.set_xlabel('time')
ax.set_title('stock realtime')
x_major_locator = MultipleLocator(10)
ax.xaxis.set_major_locator(x_major_locator)

示例2:港股日線數據

除了A股的日內分時數據外,我們還可以通過real方法,獲取到港股的日k線數據,只需要向該方法的參數中,傳入5位數的港股股票代碼,即可調用該部分數據。獲取數據后,我們仍然用Python繪圖,將示例股票00700騰訊控股的日k線數據量、價數據,繪制出來。

querycode = '00700'
Res_tx_hk_dailydata = quotation.real([querycode])
hk_dailydata = pd.DataFrame(Res_tx_hk_dailydata[querycode],
                            columns=['Date', 'Open', 'Close', 'High', 'Low', 'volume', 'divi', 'none', 'amount'])
hk_dailydata['Close'] = hk_dailydata['Close'].map(lambda x: float(x))
hk_dailydata['volume'] = hk_dailydata['volume'].map(lambda x: float(x))
fig, ax = plt.subplots(1, 1)
ax_sub = ax.twinx()  # 共享x軸,生成次坐標軸
l1, = ax.plot(hk_dailydata.Date, hk_dailydata.Close, 'r-', label='price')
l2, = ax_sub.plot(hk_dailydata.Date, hk_dailydata.volume, 'b-', label='volume')
plt.legend(handles=[l1, l2], labels=['price', 'volume'], loc=0)
ax.set_ylabel('price')
ax_sub.set_ylabel('volume')
ax.set_xlabel('time')
ax.set_title(querycode + ' stock daily')
x_major_locator = MultipleLocator(120)
ax.xaxis.set_major_locator(x_major_locator)

示例3:港股實時行情

我們不僅可以獲取港股的日線數據,還能獲取港股的實時行情數據。具體的,我們將實例化的類切換成hkquote,並調用real方法,傳入參數同樣是五位數的港股代碼,同時支持多股傳入(逗號隔開),就可以獲取到港股的實時數據了。此處我們以00001長和、00700騰訊控股為例,獲取到了實時的Snapshot數據。

quotation = easyquotation.use("hkquote")
Res_tx_hk_Snap = quotation.real(['00001', '00700'])

 


往期干貨分享推薦閱讀

數字貨幣穩定幣對網格做市策略

數字貨幣資金費策略

分享一個年化15%以上的無風險套利機會

網格交易系統開發

通過深度學習股價截面數據分析和預測股票價格

Omega System Trading and Development Club內部分享策略Easylanguage源碼

一個真實數據集的完整機器學習解決方案(下)

一個真實數據集的完整機器學習解決方案(上)

如何使用交易開拓者(TB)開發數字貨幣策略

股指期貨高頻數據機器學習預測

如何使用TradingView(TV)回測數字貨幣交易策略

如何投資股票型基金?什么時間買?買什么?

【數量技術宅|量化投資策略系列分享】基於指數移動平均的股指期貨交易策略

AMA指標原作者Perry Kaufman 100+套交易策略源碼分享

【 數量技術宅 | 期權系列分享】期權策略的“獨孤九劍”

【數量技術宅|金融數據系列分享】套利策略的價差序列計算,恐怕沒有你想的那么簡單

【數量技術宅|量化投資策略系列分享】成熟交易者期貨持倉跟隨策略

如何獲取免費的數字貨幣歷史數據

【數量技術宅|量化投資策略系列分享】多周期共振交易策略

【數量技術宅|金融數據分析系列分享】為什么中證500(IC)是最適合長期做多的指數

商品現貨數據不好拿?商品季節性難跟蹤?一鍵解決沒煩惱的Python爬蟲分享

【數量技術宅|金融數據分析系列分享】如何正確抄底商品期貨、大宗商品

【數量技術宅|量化投資策略系列分享】股指期貨IF分鍾波動率統計策略

【數量技術宅 | Python爬蟲系列分享】實時監控股市重大公告的Python爬蟲


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM