天天看点

从实例学Kettle(一):获取股票行情数据

你买股票吗?你学Kettle吗?

前面两个问题,任何一个回答“是”,本文都值得一读。如果两者都感兴趣,那么本文就值得细细品味。最好再花时间来分析一下获得的数据,从而多赚点银子。

一、背景概述

如果买股票,肯定会对股价感兴趣,那可都是真金白银啊!如果看中了一家上市公司,过去每一个开盘日的股价如何?有何规律可循?什么价格值得买入?什么价格要卖出?这一系列问题,肯定是每个股民都曾经苦苦思索过的。您可能学过K线图,研究过各类计算公式,甚至学过概率统计。但一切分析的前提,是要有数据。

如果学习Kettle,最好有些实战型的案例供参考,这样才能学得快。我们可以根据问题背景,试着自己思考解决方案。如果遇到拦路虎,可以看看案例是如何跨过的;如果全部能够自己搞定,也可以与案例进行对照,找到自己的优势和劣势,从而提高内力。

二、问题思路

现将问题具体化。

输入:股票代码和名称列表,格式为CSV文件,如下图所示。

从实例学Kettle(一):获取股票行情数据

图1:股票代码数据

输出:获取每一个开盘日的开价、收价、最高价、最低价,格式为CSV,如下图所示。

从实例学Kettle(一):获取股票行情数据

图2:股票价格数据

解决问题的思路:

1、明确数据来源。能够提供股价数据的网站较多,本文聚焦于技术研究,尽量不涉及具体三方公司,也尊重数据权属。总之一句话,首先要找到数据来源的URL。这对于购买股票的人来说,应该不难。

2、梳理萃取方法。有了地址,就可以通过HTTP协议拿到数据。但网站数据,往往掺杂非常多的干扰信息,我们需要思考真正需要的数据在哪里?是什么形式?有什么规律?然后利用字符串、正则表达式、JSON Path、XPath等处理文本的技术,提取目标数据。

3、输出文件数据。将萃取到的数据,按照指定格式和类型,输出到符合命名规范的文件中。

4、批量处理。前三步解决了某一支股票的数据获取问题,但我们感兴趣的股票显然不止一支,而是来自于文件(如图1)的一个系列。这个文件,我们可以按需删减,系统能够自动将文件中的每一支股票数据下载。所以还需要一个批量处理的技术,即将清单文件中的股票信息提取,并逐一执行数据萃取过程。

三、实例要点

1、总管作业(kd-sample001-j1.kjb)

只需每天执行一次总管作业,即可以实现股票列表的数据抽取。作业详情如图3所示。其中,转换T1(kd-sample001-t1.ktr)将股票清单提取,为批量执行T2提供数据;转换T2(kd-sample001-t2.ktr)则负责每支股票的数据提取,参数来自T1的执行结果,所以需要勾选Options标签页“执行每一个输入行”以及命名参数标签页“复制上一步结果到命名参数”。

从实例学Kettle(一):获取股票行情数据

图3:总管作业

2、股票清单转换(kd-sample001-t1.ktr)

提取股票清单数据,并复制到结果中,供后续作业中的其他节点使用。主要配置如图4所示。

从实例学Kettle(一):获取股票行情数据

图4:股票清单转换

3、股价数据转换(kd-sample002-t1.ktr)

提取股价数据主要需要三个环节。一是环境准备,包括获取变量、根据当前日期构造目标文件名称以及判断文件是否存在等;二是提取cookie,目标网站不允许直接访问数据提取地址,需要首先访问一次主页,得到cookie,并带入后续访问步骤中;三是访问数据地址,得到数据,并解析导出。

从实例学Kettle(一):获取股票行情数据

图5:股价数据转换

以下将主要步骤详情列举。

环境准备部分的主要步骤配置详情如图6所示。其中E1获取环境变量,gpdm代表股票代码,fn代表当前路径下最终存储输出文件的位置;C1利用公式,计算和格式化当前日期,加入文件名称后面,用于区分不同日期获取到的数据;O1用于判断文件是否已经存在,避免重复下载。

从实例学Kettle(一):获取股票行情数据

图6:环境准备部分配置详情

cookie获取部分主要步骤配置详情如图7所示。其中E2首次访问主页,并设置响应头字段为httpheader;E3从响应头httpheader的JSON中,解析得到cookie部分;C6/C7/C8采用字符串替换的方式,将得到的cookie进行格式化。

从实例学Kettle(一):获取股票行情数据

图7:cookie获取部分配置详情

数据解析部分主要步骤配置详情如图8所示。其中E5采用HTTP协议获取结构化数据,注意将已经格式化的cookie带入;E6采用JSON来解析数据,主要字段包括日期、开价、最高、收价,都可以通过JSON Path获取;L2采用CSV格式,输出解析数据到文件。

从实例学Kettle(一):获取股票行情数据

图8:数据解析部分配置详情