【导语】在上一篇帖子中,我们小试牛刀,介绍了如何使用简单的爬虫技术,获取到交易所盘后龙虎榜的上榜股票代码列表。在这篇帖子中我们再简单介绍一些如何获取到交易所的上市公司公告信息。
1.背景
市场上有各种资讯网站提供了上市公司公告的信息,且界面美观,方便查看,且在看盘软件的客户端中对应股票下的信息列表也能够看到相应的公告内容,但是这些渠道有一个弱点,那就是信息的即时性较差。为什么即时性较差呢?主要原因是因为这些渠道为了方便浏览者观看信息,往往需要经过一定的预处理过程,比如对公告的分类、对公告信息的整合等步骤。
另外,通过这种方式获取信息,属于被动式的拉取模式,因此更加丧失了实时性,用户无法事先知道公告会在什么时候被放出。当然了,由于交易时间段不是发公告的时间,公告信息对于即时性的要求本身并不高。然而,对于午间公告,如果能够早几分钟获取到发布午间公告的上市公司列表,并大概知道内容是什么,对于规避午后开盘后的风险或者是套利是有一些好处的(我们也已经看到了很多午后一开盘在一分钟内封上涨停的例子)。也能够更好地指定午后的交易方案。
2.意义
其实对于获取上市公司公告这个需求,仅仅依靠手动操作也是可以替代的,比如每天中午休市的时间段不断地刷新交易所网站页面。那么我们为什么还要“自寻麻烦”地去开发这样的工具呢?
首先,自己动手写代码,便于将数据进行本地化存储。数据即财富,数据本地化是后续进行一系列分析工作的基础。
有了第一步数据本地化的基础,我们就能够开展各式各样的分析工作。最简单的,可以通过匹配规则对公告标题做出性质判断,看一看能不能从公告的标题就得到对上市公司的利好利多,比如各类减持公告往往会直接在标题中包含“减持”二字。如果从公告标题无法判断,那么就要着手从公告内容去判断。由于公告的具体内容大都是以PDF格式给出的,那么我们可以尝试通过一些非结构化数据的分析工具从PDF文件中抽取出关键信息,甚至是对公告的全文进行“情感分析”。
另外,通过自定义的代码形式,我们就可以实现一些更加个性化和定制化的小技巧。既然,资讯网站的弊端在于获取公告信息不够及时,我们就能够通过代码自定义每一分钟执行一次,去检查网站是否有公布最新的公告信息。我们也可以通过在代码中添加自定义股票池,指定我们特别关注的几只“自选股”,一旦发现公告信息涉及到我们关注的标的,就及时地进行弹窗预警。
从上面可以看出,有了数据之后,通过定制化,我们能做的有很多。
3.详解
这里,我们首先以获取当前交易所显示的所有公告信息的函数为例解释一下代码的含义,方便小伙伴进一步根据自己的需求修改。
today:获取了运行当天的日期
url:访问的网站域名,在这里我们通过字符串拼接的方式使用了today构成了域名的一部分,这样就能够获取到查询当天的公告信息了
headers、data:访问的网站所需要的数据,实际上是我们的浏览器在访问网站所需要发送的数据,否则可能会造成无法访问
request2url函数访问目标URL地址,这里使用到了我们之前准备好的数据
由于从目标服务器获取的数据编码方式与本地的数据编码不一致,因此我们使用decode()方法进行编码转换
pattern变量定义了一个正则表达式,用于匹配获取每一条公告
pattern_result根据定义的正则表达式,得到了每一条公告信息
获取公告信息的主要代码就上面大概10行,需要注意的是需要依赖urllib2和urllib包,建议在安装了Anaconda包的Python环境下运行。