APP下载

基于网络爬虫的上市公司交易数据共享平台设计

2019-11-11王勇

价值工程 2019年27期
关键词:网络爬虫共享平台上市公司

王勇

摘要:本文基于网络爬虫原理,结合文本分析技术,设计了一个上市公司交易数据共享平台(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信息的

区块段。公司的各项基本属性,如公司名称、注册资本等信息,则位于区块段。区块段的文本指定了不同的公司属性。以贵州茅台为例,HTML中的区块段为注册资本125,620万元,第一个区块段说明了注册资本字段名是“注册资本”,第二个区块段说明了字段的值,即注册资本为“125,620万元”。模块对所有的区块段進行遍历处理,即可得到所有的字段名和对应的值。

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.

猜你喜欢

网络爬虫共享平台上市公司
炼铁厂铁量网页数据获取系统的设计与实现
中企搭乘“共享平台”好出海
高校大型仪器设备共享平台构建与运行管理探讨