今天研究同花顺股票历史数据采集比较有意思,所以记录一下。
抓包请求分析
我们通过下面链接访问同花顺某只股票详情页面,这里以【贵州茅台】为例
http://stockpage.10jqka.com.cn/600519/
我这里使用火狐浏览器来抓包,请求之前按下 F12 打开浏览器控制台,然后输入链接回车访问,控制台就会进行抓包,等待页面加载完成,能看到日度数据后,就可以停止抓包了。
这里我们以倒数第二根线为准,因为还在交易,倒数第一根线的数值是不断变化的,不好分析是哪一个请求。所以记录下倒数第二根线的开盘价、收盘价。在浏览器控制台进行搜索。
奇怪的事情就发生了,你会发现搜索不到任何相关的数据返回,出现这种情况有一下几种可能:
1、使用的是WS协议(webSocket协议),在股票数据中比较常见;
2、可能使用的是整数,而非小数,去掉小数点搜索一下;
3、传输数据进行了加密;
通过分析,我觉得如果要获得某只股票历史数据,股票代码应该是一个必要参数(只要他股票代码不加密),所以直接搜索有股票代代码参数的链接,就可以减少分析范围,发现本次是第三种情况,数据进行了加密,历史日度数据请求链接如下:
https://d.10jqka.com.cn/v6/line/hs_600519/01/all.js
响应数据分析
1、sortYear分析
通过数据名称、格式,应该是数据的年份。但是第二个数字86、234就不知道是什么意思了,猜测了一下应该是每年的数据量(后来统计了一下数据量是能对上的,说明猜测正确)。
2、price分析
通过名称应该是我们要的价格,会发现和我们界面上看到的数值不一样,所以搜索也搜索不到对应的。通过研究发现需要每4个划分为一组,计算规则如下:
# price中的数据4个一组,
# 最低价:每组(第1个)/ 100
# 开盘价:每组(第1个 + 第2个)/ 100
# 最高价:每组(第1个 + 第3个)/ 100
# 收盘价:每组(第1个 + 第4个)/ 100
3、volumn分析
成交量就不存在分组,一对一关系。只是也是用整数表示的,要除以100才是真实值
所有难点都讲完了,python爬虫采集代码就比较简单,python请求上没有任何坑,所以就不在累述。