春雨 王宇棟

摘要:隨著股票/期貨市場的快速發展,股票/期貨相關數據的獲取是第一個需要解決的問題。通過API調用來獲取數據能優化數據獲取流程,節約數據獲取時間。文章基于股票/期貨API的滬深港股票/期貨交易數據調用方法,分析對比其與網絡爬蟲數據調用方法的異同。由于單獨使用網絡爬蟲或API調用不能完成數據準確完整的調用。因此,提出一種API調用和網絡爬蟲相結合的方法,從而解決API調用數據次數受限,網絡爬蟲調用數據過程復雜等問題,綜合兩種方法的優點以實現數據高效完整的獲取。
關鍵詞:API;API調用;數據獲取;網絡爬蟲
19世紀70年代,Digital Research公司創造出了世界上第一個實用的軟件API(Application Programming Interface,應用程序接口),這個API僅僅由20種簡單的函數組成,但就是這個API的出現改變了整個計算機領域。之后比爾·蓋茨等人復制了其API開發出MS-DOS操作系統,添加了一些簡單的特性之后,將其推上了軟件開發的主導地位。
1981年,微軟公司發布Windows操作系統,但其自己開發出來的Windows API不能滿足當時使用需求,大量的開發人員投入到Windows程序的開發中來,同時加快了API的發展進程。
1988年,微軟公司購買了Alan Cooper開發的可視編程語言:Ruby。Ruby滿足了名為VBX的軟件API,這種API可以讓開發人員動態地擴展Visual Basic功能。
除了微軟之外,Unix世界也創造出可以在網絡之間自由通信的API,這就是TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協議/網際協議)。到了20世紀90年代,Marc Andreessen推出了世界上第一個Web瀏覽器:Mosaic。正是因為有了TCP/IP API,Netscape可以在自己的計算機之外查找其他網絡上的計算機,并且提取其中的文件。
今天的軟件開發者很大一部分是在開發Web應用程序, Web領域的開發者們不會對Web本身有太多的研究,所以這些開發者需要把其他開發者預先編寫的部分組合起來,所以他們比以前更多地依賴于為其編寫的軟件API。同時API在金融領域也發揮著它的優勢。由于互聯網技術的不斷發展,股票/期貨的交易數據也呈現著快速增長的趨勢。目前大量股票/期貨交易數據為政府、組織機構、企業所擁有,但是社會層面對股票/期貨交易數據的需求也越來越強烈,越來越多的團體或個人需要按照自己的交易習慣定置個性化交易軟件。股票/期貨交易數據的獲取量大、股票/期貨數據更新頻繁、數據傳播迅速,并且數據獲取用戶相對集中,所以用API來調用股票/期貨數據既滿足了用戶對股票/期貨數據的需求同時還節省了數據獲取時間。
一、API概述
API是指操作系統預先把這些復雜的操作寫在一個函數里面,編譯成一個動態鏈接庫,跟隨操作系統一起發布,并附上使用文檔說明,使用者只需要簡單地調用這些函數就可以完成一些復雜的工作。API具有以下性質,一是可用性,是指用戶能否便捷運用API來完成指定任務,是衡量API質量的重要指標。二是穩定性,代表著API的質量,穩定的API可以提高調用數據的準確性完整性。三是安全性,API的不規范使用可能會導致數據在調用過程中發生錯誤,致使返回給用戶的數據不準確甚至給操作系統帶來安全風險。API按用戶不同權限提供數據服務其中包括:一是支持內容創建,API 允許用戶定制、獲取、上傳數據;二是禁止內容創建,API 只允許用戶定制、獲取數據,不允許對數據進行編輯更改。大部分開放給普通用戶的API都禁止用戶對其創建內容,主要原因是防止權威數據的漏傳、誤傳甚至丟失,例如用戶獲取實時股票/期貨交易數據。
API 調用是通過 API 有條件的精確獲取用戶所需要的數據,調用方式靈活方捷、反映速度快。
二、API調用股票/期貨數據的方法與實現
API調用數據原理如圖1所示。
(一)API接口的選擇
獲取股票/期貨數據的API接口主要有:數據超市、雅虎、新浪、Google等。
由于計算機技術的發展以及數據獲取手段的普及,現在出現了許多數據超市,可以更加高效快捷的獲取股票/期貨數據,不僅節約了獲取者的時間,同時也有利于獲取更多準確及時的數據。下面介紹三種數據接口從中選擇一個作為接下來實驗的數據接口。
1. 雅虎
缺點:部分美國假期數據缺失;調用數據的次數有限制,超過規定次數就會被警告并封鎖IP地址。優點:數據比較權威,準確性有保障,可以獲取其他國家市場數據;返回數據解析方便,較好提取。
2. 新浪
缺點:股票/期貨歷史數據不夠完整。優點:速度非???返回數據容易處理;可以按照使用者要求獲取單一方面的數據。
3. Google
缺點:數據都是從新浪獲取,獲取自由度低。優點:數據準確可靠。
綜合以上接口的優缺點,通過對比分析選擇數據更加全面完整,獲取范圍更加廣泛的雅虎接口作為實驗中的API接口。
(二)API調用股票/期貨數據
從新浪財經網絡接口直接調用股票/期貨數據。
基本步驟:import requests
r=requests.get("http://hq.sinajs.cn/list=股票/期貨代碼")
print(r.text)
注意:上證股票在輸入股票代碼時要在前面加上sh,深圳股票在股票代碼前面加上sz,港股在股票代碼前面加上hk
下面分別調取了滬股浦發銀行sh00000、深股平安銀行sz000001、以及港股頤海國際hk01579、海底撈hk06862的股票交易數據和玉米、白銀、黃金的期貨交易數據。
浦發銀行股票交易數據:
import requests
r=requests. get("http://hq. sinajs. cn/list-s600000")
print (r. text)
var hq_ str_sh600000="浦發銀行,12. 170, 12. 230, 12. 040, 12. 220, 12. 010, 12.030, 12. 040, 38092059, 460234691. 000, 62300, 12.030,239567, 12. 020, 729627, 12.010, 1215100, 12. 000, 2099000,11. 990, 82800, 12. 040, 192900, 12. 050, 390800 12. 060, 238700, 12. 070, 296100, 12. 080, 2019-11-20, 15:00:00, 00,"
平安銀行股票交易數據:
import requests
r=requests. get("http://hq. sina js. cn/list=sz000001")
print (r. text)
var hq_str_sz000001="平安銀行16.300, 16.410, 15.850, 16.300, 15.770, 15.850, 15.860, 172438353, 2747598383. 400, 303297, 15. 850, 133200, 15. 840, 64083, 15. 830, 36600, 15. 820, 84700, 15. 810, 36200, 15. 860, 256000 15. 870, 1405307, 15. 880, 51100, 15. 890, 166385, 15. 900, 2019-11-20,15:00:03, 00"
頤海國際股票交易數據:
import requests
r=requests. get("http://hq. sina js. cn/list=hk01579")
print (r. text)
var hq_str_hk01579="NULL,頤海國際,50.400, 50.400, 51.750,49.500, 5l.350,0.950, 1.885, 51.300, 51.350, 89306132, 1760506, 84.180, 0.000,56.050, 18.020,2019/11/20, 16:08"
海底撈股票交易數據:
import requests
r=requests. get ("http://hq. sina js. cn/list =hk06862")
print (r. text)
var hq_str_hk06862="NULL, 海底撈35.000, 35.000, 35.400, 34.850, 35.300, 0.300, 0.857, 35.200, 35.300, 89417573, 2541754, 93.634, 0.000, 39.000, 16. 420, 2019/11/20, 16:08"
玉米期貨交易數據:
import requests
r=requests. get ("http://hq. sina js. cn/list=C0")
print(r. text)
var hq_str_C0="玉米連續,150040, 1857. 00,1857. 00,1844. 00, 1854. 00, 1845. 00. 1846 00, 1846. 00, 1848. 00, 1857. 00, 2316, 165, 1189024,473098,連,玉米,2019-11-20, 0, 1865. 000, 1833.000, 1868.000, 1833.000, 1895. 000, 1823. 000, 1901.000, 1810 000, 16.838"
白銀期貨交易數據:
import requests
r=requests. get("http://hq. sina js. cn/list=AG0")
print (r. text)
var hq_str_ AG0="白銀連續, 145955, 4170. 00, 4192. 00, 4132. 00, 4185. 00, 4169. 00, 4170. 00, 4170. 00, 4165. 00, 4147. 00, 127, 7, 624046, 1391504, 滬,白銀, 2019-11-20, 0, 4192. 000, 4091. 000, 4280. 000, 4036. 000, 4487. 000, 4036. 000, 4843. 000, 4036. 000, 78. 485 "
黃金期貨交易數據:
mport requests
r=requests. get("http://hq. sina js. cn/list =AU0")
print(r. text)
var hq_ str_AU0="黃金連續,145954, 337.85,339. 55, 336. 70, 388.30, 339.15, 339. 40, 339.15, 0.00, 337. 75, 25, 6, 169804, 78028,滬,黃金, 2019-11-20,0, 339.550,334.600, 339.550, 327. 600, 347.750, 327. 600, 363. 850, 327. 600, 3.429"
三、API調用與網絡爬蟲對比分析
(一)關于API調用數據方法的分析
API調用數據方法的普及主要原因有:
API 提出了一種代碼的編制復用機制,用戶可以直接使用已有的API接口,復用他人編制出來的代碼完成數據的調用。
API開發出一種信息隱藏的機制,用戶在不知道具體細節的情況下,就可以完成相應的數據調用功能。
API 提供了訪問某些數據資源的接口,用戶通過這些API接口就能直接訪問到想要的資源,不用進行接口的尋找,節省數據調用時間。
API調用數據支持多項目、多模塊的數據調用,同時支持私有項目、公開項目、加密項目的數據調用。
API調用數據支持協同管理,支持添加項目成員,并且可精確控制每個成員的權限。
API接口支持普通接口、restfull、josn、xml等各種接口的數據的調用,接口返回數據也支持word、pdf格式下載,可單個下載也可按模塊下載。
通過調用 API 接口可以實現股票/期貨數據便捷高效的獲取與解析。但所有的數據提供商都不會無條件無限制的提供給普通用戶完整數據,例如在股票/期貨數據獲取過程中,有許多擁有重要查詢功能的 API 是不提供給普通用戶的,同時對于開放的 API,一次調用的返回結果數量有限制。同時因為 API 接口自身的復雜性以及數據本身的缺失和疏漏等原因,使用者經常會對API進行錯誤的使用,導致調用數據和現實不符合甚至出現重大誤差。因此使用 API 調用數據的方法只能解決數據獲取中的一部分問題。
(二)API調用數據與網絡爬蟲對比分析
爬蟲指的是:向網站發起請求,獲取資源后分析并提取有用數據的程序。
網絡爬蟲的基本原理:發起請求,使用http庫向需要的數據所在的網站發起請求,即發送一個Request;獲取響應內容,如果服務器能正常響應,則會得到一個返回數據;解析返回數據,通過第三方解析返回的數據,從中獲取所需要的部分;保存數據。將提取的有用的數據保存到本地。
與基于API 的數據調用相比,基于網絡爬蟲的數據調用效率與性能有明顯差距,同時網絡爬蟲調用數據還要解決網頁的模擬登錄問題,調用過程復雜。但是通過網絡爬蟲進行數據調用,能夠解決用戶反復調用API接口帶來的數據量限制等問題,使能夠調用的數據量明顯增加,調用過程穩定。
但是在只需要部分特定的數據時,基于網絡爬蟲的數據調用方法速度較慢,在處理數量相同的信息時需要解決更多的問題,在數據的返回解析方面也更加復雜。而通過API調用數據可以一次性完成數據調用、返回、解析、存儲,不需要像網絡爬蟲獲取數據一樣,一個一個頁面解析提取的數據,同時API調用返回數據大小較小,速度快使調用更有效率。
四、對數據調用方法的思考
API 調用數據的抓取方式效率高,但因為服務器限制,不能獲得完整數據集,而基于網絡爬蟲的數據獲取方案可以獲得較大的數據,但無法一次性抓取用戶想要的數據,獲取效率比較低。所以需要將兩者結合起來,以實現最佳數據抓取獲取效果。
首先,計算需要抓取的數據大小,如果需要獲取的數據量小于用戶使用的API接口規定訪問的最大限制次數,則自動調用API接口獲取數據。反之就使用網絡爬蟲獲取用戶所需要的數據。如果在使用API接口的過程中,累計數據量超過了接口所允許的最大訪問次數,這時也可以自動轉換為網絡爬蟲獲取剩下部分的數據。獲取完整數據后將數據放入一個數據庫中,數據庫自動檢測對比數據的真實準確性,從而輸出用戶所需要的數據。
五、結語
本文主要介紹一種基于API接口獲取股票/期貨數據的方法,將其與傳統網絡爬蟲獲取數據方法進行對比。提出兩者相結合的方法,一方面彌補了API調用數據的調用次數限制問題,另一方面解決了網絡爬蟲調用數據需要模擬登陸和大量的頁面解析的問題。結合兩者優點提高調用效率保證數據的準確性與完整性,但是從大數據的發展角度出發,在不考慮API訪問次數限制的情況下,基于API的數據獲取方法在獲取效率方面還有很大的發展空間,之后的研究可以從如何降低API接口的限制訪問次數入手提出更加符合要求方便快捷的數據獲取方法。
參考文獻:
[1]廉捷,周欣,曹偉,劉云.新浪微博數據挖掘方案[J].清華大學學報(自然科學版),2011,51(10):1300-1305.
[2]冰雨夢.軟件接口的歷史和未來[J]. 中文信息:程序春秋,2002(06):18-19.
[3]李正,吳敬征,李明樹.API使用的關鍵問題研究[J].軟件學報,2018,29(06):1716-1738.
[4]趙前東,葉猛.微博熱點話題檢測系統的設計與實現[J].電視技術,2013(03):211-214.
[5]王佳秋.基于用戶行為及關系的微博電商企業影響力度量[D].哈爾濱:哈爾濱商業大學,2013.
[6]徐雁飛,劉淵,吳文鵬.社交網絡數據采集技術研究與應用[J].計算機科學,2017(01):277-282.
[7]石磊.新浪API與網絡爬蟲結合獲取數據的研究與應用[J].中國電子商務,2013(22):58-59.
[8]李良.基于Python的測井數據校驗對比[J].信息系統工程,2014(06):142.
[9]余斌.基于Bottle的Python網絡應用開發[J].無線互聯科技,2014(06):29+103.
[10]劉海房,莫世鴻,龔振,范冰冰.面向API調用的開放數據存儲管理研究[J].計算機應用與軟件,2018,35(08):93-97.
(作者單位:昆明理工大學公共安全與應急管理學院)