王勇

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