前面我们讲过东方财富网获取全部实时股票数据,今天来做一个个股的K线数据获取。
获取个股数据首先要有股票代码,然后根据代码来获取,这个和我们浏览网页的顺序差不多,比如我们先找民航机场板块:

然后进到白云机场个股:

然后放大K线到全屏:

我们抓取数据也要按照这个过程来做网站分析。
网站分析
板块页面的分析:

民航机场板块共有13条数据,我们筛选jquery之后找一下对应的数据,然后找到对应的真实URL:

我们只要股票代码和名称,所以这个过程应该比较简单。
接下来看个股K线全屏的页面,检查中筛选kl:

K线数据肯定比较多,通常都有几千行,也要找到真实的URL:

这个URL我们要来分析一下:

后面的一大串字符,格式化显示应该是这样的
Fields1、2都是数据的名称,也就是我们抓取的数据的列名称,这个我们用别的方法来找,先不管他,beg、end是开始与结束时间,估计这个20500101就对应昨天,开始都默认是0。最关键的是secid这个是股票代码,我们要抓取个股数据,就要修改这个值,这个值有两部分组成小数点分割,前面的1代表沪市,如果是0代表深市,后面就是白云机场的股票代码。
接下来说数据的名称如何对应:

K线图中有这样一个数据块,里面的汉字部分就对应了我们抓取的数据的列名称,我们来找这个数据块在源码中的位置:

找到这个popfloatwin浮动窗口,复制这个element:

到Power Query中建立空白查询,粘贴复制的内容:

是不是看着头晕,没关系,找到分析,选xml:

会自动解析:

展开后备用。
抓取数据
首先抓取民航机场板块的股票名称和代码:
先去复制真实的URL,然后从web获取数据:

这里要直接在公式栏里输入三个函数来解析jsoncallback:
Json.Document(Text.BetweenDelimiters(Text.FromBinary(Web.Contents(真实URL)),"(",")"))
然后就是展开,我们不需要其他的内容,只要股票名称和代码:

这个查询放这里备用。
然后是个股K线数据抓取:
同样的直接复制对应的真实URL,然后抓取,方法与上面的方法一致:

然后展开,整理下格式,至于数据的表头,我们可以在抓取全部数据后统一更改。
我们用这个查询创建一个函数:

主要就是修改这个secid=号后面的内容,这里涉及到沪深两市的数据抓取,直接判断id的第一个符来修改小数点前面的部分,也可以,但是我比较懒,我就把这个函数直接复制一份,做一个0.的函数,然后在调用函数的时候用try..otherwise试着用第一个函数如果出错就用第二个函数,这样就保证两市数据都能抓出来了。

我们回到板块抓取的查询,新建列调用这两个函数:

然后展开数据:

前面三列我们自己手动修改一下,后面的用准备好的名称来修改:
先整理一下名称,Column1.2开始修改:

然后把原来的列名称对应上:

调整一下位置:

然后我们到展开的查询中使用Table.ToRows函数把上面这个表转换成列表,替换列名称:

最后修改一下数据类型数据就可以加载了。

