王勇
摘要:本文基于網(wǎng)絡(luò)爬蟲原理,結(jié)合文本分析技術(shù),設(shè)計了一個上市公司交易數(shù)據(jù)共享平臺(Sharing Platform for Listed Company Trade Data,SPLCTD)。平臺能夠自動從網(wǎng)絡(luò)獲取A股上市公司的基礎(chǔ)信息、交易數(shù)據(jù)。經(jīng)過規(guī)范化處理,儲存到數(shù)據(jù)庫中后,交易數(shù)據(jù)通過網(wǎng)絡(luò)服務(wù)接口,共享給終端用戶,為量化分析、自動化交易、交易策略等相關(guān)研究者提供了便捷的數(shù)據(jù)獲取渠道。
Abstract: The sharing platform for listed company trade data (SPLCTD) is designed based on web crawler technology. The platform crawl fundamental information and trade data of listed company from internet website automatically. After normalizing, these data is stored in database and shared through web service for the end user on research purpose.
關(guān)鍵詞:網(wǎng)絡(luò)爬蟲;上市公司;交易數(shù)據(jù);共享平臺
Key words: web crawler;listed company;trade data;sharing platform
中圖分類號:TP391.3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 文獻標識碼:A ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文章編號:1006-4311(2019)27-0267-03
0 ?引言
隨著上市制度的發(fā)展與完善,越來越多的企業(yè)選擇上市融資來擴大企業(yè)規(guī)模。而網(wǎng)絡(luò)和計算機工具的發(fā)展,使得金融工程、量化分析與自動化的程序交易也越來越熱門。相關(guān)從業(yè)者雖然可以從各大門戶網(wǎng)站(如新浪財經(jīng)、網(wǎng)易財經(jīng)等)在線瀏覽交易信息,但對于線下的技術(shù)分析、量化分析、策略研究等方面,在線瀏覽的方式還是有很多不便之處。
本文基于爬蟲原理[1],設(shè)計了一個上市公司交易數(shù)據(jù)共享平臺(Sharing Platform for Listed Company Trade Data,SPLCTD),它能夠自動從網(wǎng)絡(luò)上抓取A股上市公司的基本信息和交易數(shù)據(jù),經(jīng)過規(guī)范化處理儲存到數(shù)據(jù)庫,最后通過網(wǎng)絡(luò)接口,共享給終端用戶使用,為量化分析、自動化交易、交易策略研究者提供便捷的數(shù)據(jù)獲取渠道。
1 ?交易信息平臺設(shè)計
1.1 設(shè)計目標
基于網(wǎng)絡(luò)爬蟲技術(shù),設(shè)計上市公司交易信息共享平臺,實現(xiàn)自動獲取上市公司股票交易信息,并通過網(wǎng)絡(luò)接口,將數(shù)據(jù)共享給終端用戶。系統(tǒng)總體結(jié)構(gòu)如圖1。
1.2 平臺功能與主要模塊設(shè)計
平臺主要包括以下功能:①自動從網(wǎng)絡(luò)獲取所有上市公司的基礎(chǔ)信息和交易數(shù)據(jù);②將數(shù)據(jù)處理成規(guī)范的格式,儲存到數(shù)據(jù)庫中;③通過開放的網(wǎng)絡(luò)服務(wù)接口,將數(shù)據(jù)共享給終端用戶。
平臺主要包含了以下模塊:
①數(shù)據(jù)獲取模塊,負責生成URL地址池,將網(wǎng)絡(luò)信息抓取下來,并將原始信息傳遞給數(shù)據(jù)處理模塊。
②數(shù)據(jù)處理模塊,從抓取的原始信息中提取出所需要的數(shù)據(jù),并檢查是否為有效數(shù)據(jù),如果數(shù)據(jù)無效,則由數(shù)據(jù)獲取模塊重新抓取,最后將有效的數(shù)據(jù)傳遞給數(shù)據(jù)存儲模塊。
③數(shù)據(jù)儲存模塊,將數(shù)據(jù)處理成符合平臺規(guī)范的數(shù)據(jù)格式,保存到數(shù)據(jù)庫中。
④數(shù)據(jù)共享模塊,對外部網(wǎng)絡(luò)用戶提供了統(tǒng)一的網(wǎng)絡(luò)服務(wù)接口,共享平臺中的數(shù)據(jù)。
由于是開放的信息共享平臺,所以沒有加入用戶管理模塊。平臺主要功能模塊如圖2所示。
2 ?關(guān)鍵技術(shù)分析
需要注意的是,在使用爬蟲抓取信息時,需要遵循通用的爬蟲規(guī)則,首先看網(wǎng)站的robots.txt文件中是否包含了允許抓取的規(guī)則,或者在網(wǎng)頁的信息中是否存在允許抓取的規(guī)則,否則不建議對該網(wǎng)站的數(shù)據(jù)進行抓取。由于網(wǎng)易財經(jīng)網(wǎng)站(http://money.163.com)的網(wǎng)頁信息中明確包含了可以被爬蟲索引和追蹤鏈接的說明,所以本文的信息抓取分析工作均以網(wǎng)易財經(jīng)網(wǎng)站為例。
2.1 數(shù)據(jù)獲取模塊
數(shù)據(jù)獲取模塊分為兩部分:①任務(wù)生成模塊。可以自動生成所有的URL,并放入任務(wù)池;②爬蟲模塊。從任務(wù)池獲取URL,然后從網(wǎng)絡(luò)上獲取所需要的交易信息。
2.1.1 抓取內(nèi)容
主要抓取了上市公司的基本信息和交易信息,包括以下內(nèi)容:
①公司資料。包括公司簡介、公司高管、所屬行業(yè)、所屬板塊等公司的基本工商信息。
②股本股東。包括了股本結(jié)構(gòu)、主要股東、流通股東、基金持股等數(shù)據(jù)。
③財務(wù)數(shù)據(jù)。包括財務(wù)摘要、財務(wù)指標、資產(chǎn)負債表、利潤表、現(xiàn)金流量表等數(shù)據(jù)。
④交易信息。包括收盤價,最高價,最低價,開盤價,前收盤,漲跌額,漲跌幅,換手率,成交量,成交金額,總市值,流通市值??梢宰トv史交易信息和當日交易信息。
當公司的基本信息發(fā)生變化時,如股東信息、財務(wù)數(shù)據(jù)等,爬蟲會自動保存歷史數(shù)據(jù),并將更新后的數(shù)據(jù)抓取下來。
抓取到的內(nèi)容主要有兩種類型:網(wǎng)頁類型的數(shù)據(jù)和文件類型的數(shù)據(jù)。抓取內(nèi)容①、②③以及④中的當日交易信息均為網(wǎng)頁類型的數(shù)據(jù),④中的歷史交易信息為CSV文件類型的數(shù)據(jù)。
由于網(wǎng)頁信息的分析和抓取工作類似,CSV文件的分析與網(wǎng)頁信息的分析不同,故以下分析以抓取公司內(nèi)容、歷史交易信息兩項內(nèi)容為例。
2.1.2 抓取URL分析
①公司內(nèi)容URL。
經(jīng)過分析,可知公司資料入口URL為:
http://quotes.money.163.com/f10/zycwzb_XXXXXX.html
其中,XXXXXX代表交易代碼,其他為固定內(nèi)容。如果要抓取貴州茅臺的公司資料信息,則將它替換為600519即可,即最終放入任務(wù)池的URL為:
http://quotes.money.163.com/f10/zycwzb_600519.html
②歷史交易信息URL。
經(jīng)過分析可知,歷史交易信息的入口URL為:
http://quotes.money.163.com/service/chddata.html?code=&start=&end=&fields=,地址后有四個參數(shù),其含義分別為:
code參數(shù):長度為7的整數(shù),最左第一位為證券交易所的代碼,上交所為0,深交所為1。后六位是交易代碼;
start參數(shù):交易的起始日期;
end參數(shù):交易的終止日期;
fields參數(shù):需要獲取的交易數(shù)值。多個參數(shù)之間用英文的分號分隔。具體參數(shù)值和含義見表1。
假設(shè)要抓取貴州茅臺從2017年1月1日到2019年5月1日的所有歷史交易信息,則最終構(gòu)造的URL為:
http://quotes.money.163.com/service/chddata.html?code=0600519&start=20070101&end=20190501&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP
2.1.3 任務(wù)生成模塊
要構(gòu)造所有上市公司的交易信息的URL地址,只需要對URL中的固定部分和參數(shù)部分進行拼接,就可以生成所有抓取地址。不同的抓取內(nèi)容需要拼接不同的參數(shù)。最后將所有構(gòu)造完成的URL放入任務(wù)池。
由于交易信息的數(shù)據(jù)主要是文本信息,類型比較單一,但是公司數(shù)量較多,可以按照平均分配的原則,每個爬蟲服務(wù)器獲取同等數(shù)量的抓取任務(wù);或在當前的抓取任務(wù)完成后,由爬蟲服務(wù)器自己從任務(wù)池中獲取新的任務(wù)。
2.1.4 爬蟲模塊
該模塊將任務(wù)池中的URL作為參數(shù),向服務(wù)器發(fā)送HTTP請求,并判斷返回信息是否有效。在現(xiàn)實環(huán)境下,網(wǎng)絡(luò)和主機的性能對抓取任務(wù)都有影響,所以需要判斷服務(wù)器的響應(yīng)狀態(tài)、返回信息的完整性等。如果服務(wù)器沒有響應(yīng),或返回信息不完整,則需要重新發(fā)送相應(yīng)的請求。如果返回信息有效,則將這些信息傳遞給數(shù)據(jù)處理模塊進行進一步的處理。同時由于網(wǎng)站對爬蟲的使用有限制,可以使用分布式爬蟲來完成抓取任務(wù)[2]。
2.2 數(shù)據(jù)處理模塊
負責接收爬蟲返回的原始信息,并將其中的有效信息提取出來,最后處理成符合平臺規(guī)范的數(shù)據(jù)格式。
2.2.1 網(wǎng)頁信息的處理
爬蟲獲取的網(wǎng)頁信息是由HTML語言編寫的一種文本文件,它的內(nèi)容是由成對的格式說明標記組成。所以可以使用文本分析工具、或編程語言提供的正則表達式、第三方的工具庫(如Python語言中的Selenium庫、Scrapy庫等)來進行自動化處理。
公司資料信息在HTML信息的
區(qū)塊段。公司的各項基本屬性,如公司名稱、注冊資本等信息,則位于2.2.2 文件信息的處理
歷史交易信息的抓取結(jié)果為CSV格式的文件。CSV文件是用逗號分隔的文本文件。同樣可以使用文本分析工具來進行處理。
從網(wǎng)易財經(jīng)抓取的結(jié)果來看,歷史交易信息的CSV文件格式為:第一行是字段名,分別說明了各列數(shù)據(jù)的含義,有交易日期、開盤價、最高價、最低價、收盤價、漲跌額、漲跌幅、成交量、成交金額、換手率等信息。從文件的第二行開始,則是實際的交易數(shù)據(jù)。數(shù)據(jù)按交易日期降序排列。
另外,在原始的歷史交易信息中,沒有對應(yīng)的公司交易代碼,所以在最終寫入數(shù)據(jù)庫的時候,需要把交易代碼與歷史交易信息相關(guān)聯(lián),防止數(shù)據(jù)混亂。
2.3 數(shù)據(jù)儲存模塊
數(shù)據(jù)儲存模塊篩選掉重復(fù)的數(shù)據(jù)后,將數(shù)據(jù)整理成符合平臺要求的格式,儲存到數(shù)據(jù)庫中。若交易數(shù)據(jù)有缺失,則將對應(yīng)的URL地址重新放入任務(wù)池,由爬蟲服務(wù)器重新獲取,并將事件到后臺日志,由管理員進一步處理。
2.4 數(shù)據(jù)庫設(shè)計
平臺抓取的信息有公司基本信息、財務(wù)信息、股本股東變動情況和交易信息,其中交易信息分為歷史交易信息和當日交易信息。
所以數(shù)據(jù)庫中的設(shè)計了5張表,分別儲存以上數(shù)據(jù)。
2.4.1 基本信息表
記錄了上市公司的工商注冊信息。主要字段包括:交易所代碼、公司交易代碼、組織形式、中文簡稱、辦公地址、公司全稱、公司電話等信息。
2.4.2 財務(wù)信息表
主要記錄了上市公司的主要財務(wù)信息。主要字段包括:公司交易代碼、收錄日期、基本每股收益、每股凈資產(chǎn)、營業(yè)利潤、利潤總額、凈利潤、總資產(chǎn)、流動資產(chǎn)、總負債、流動負債、股東權(quán)益等信息。
2.4.3 股本股東表
記錄了股本和股東的變動情況。主要字段包括:公司代碼、收錄日期、十大流通股東、持有比例、本期持有股、持股變動數(shù)、十大股東、持有比例、本期持有股、持股變動數(shù)等信息。
2.4.4 歷史交易信息表
主要字段包括:公司代碼、交易日期、開盤價、最高價、最低價、收盤價、漲跌額、漲跌幅、成交量、成交金額、換手率等信息。
2.4.5 當日交易信息表
主要字段包括:公司代碼、交易日期、交易時間、成交價、價格變動、成交量、成交額、交易性質(zhì)(買盤/賣盤)等信息。
2.5 數(shù)據(jù)共享模塊
模塊對外部網(wǎng)絡(luò)用戶提供了統(tǒng)一的網(wǎng)絡(luò)服務(wù)接口[3],共享平臺中的數(shù)據(jù)。當終端用戶向平臺請求數(shù)據(jù)時,數(shù)據(jù)共享模塊返回類型可以設(shè)計成易于程序的處理的數(shù)據(jù)格式,如JSON類型的數(shù)據(jù)。JSON數(shù)據(jù)類型是一對花括號括起來的{鍵:值}對的形式,即{Key:Value}。其中的Key是字段名,Value是字段的值。以貴州茅臺為例,平臺對終端用戶返回的單條數(shù)據(jù)格式為:{“NAME”: “貴州茅臺”, “CODE”: “600519”, “DATE”: “2019-05-22”, “POPEN”: 894.98, “PHIGH”: 904.00, “PLOW”: 880.00, “PCLOSE”: 888.00, “CHG”: -7.00, “PCHG”: -0.78, “ATURNOVER”: 32042, “VOTURNOVER”: 285387, “TURNOVER”: 0.26}。如果用戶請求了多條數(shù)據(jù),則返回信息由多條JSON數(shù)據(jù)構(gòu)成[4]。
3 ?總結(jié)與展望
本文提出了一種基于網(wǎng)絡(luò)爬蟲的數(shù)據(jù)共享平臺的設(shè)計,主要目標是自動獲取上市公司的交易數(shù)據(jù),并提供給終端用戶使用。平臺通過自動生成抓取URL,使用爬蟲獲取到原始的HTML信息和CSV文件,并從中提取出需要的信息,按照數(shù)據(jù)平臺的規(guī)范儲存到數(shù)據(jù)庫中,最后通過網(wǎng)絡(luò)服務(wù)接口,開放給用戶使用。另外,根據(jù)《上市公司信息披露管理辦法》的規(guī)定,上市公司必須定期披露財報數(shù)據(jù),還有臨時發(fā)布的通告信息等。這些信息主要以PDF文件的方式,發(fā)布到中國證監(jiān)會指定的上市公司信息披露網(wǎng)站,在未來的工作中,可以對這些信息進行自動獲取和分析,進一步豐富平臺的數(shù)據(jù)類型,為使用者提供更大的便利。
參考文獻:
[1]劉金紅,陸余良.主題網(wǎng)絡(luò)爬蟲研究綜述[J].計算機應(yīng)用研究,2007,24(10):26-29.
[2]許笑,張偉哲,張宏莉,等.廣域網(wǎng)分布式Web爬蟲[J].軟件學(xué)報,2010,21(5):1067-1082.
[3]陳珊,許林英,袁琳.Web服務(wù)綜述[J].微處理機,2005(02):1-3.
[4]王祎霂.基于JSON的Web服務(wù)描述框架的設(shè)計與實現(xiàn)[D].天津大學(xué),2014.