Python爬虫实战:抓取与解析北上资金持仓数据
本文详细介绍如何使用Python爬虫技术抓取东方财富网北上资金逐日持仓数据。通过逆向分析API接口参数,利用requests库获取JSON数据,并结合prettyTable进行格式化展示。此外,文章还构建了一个简单的线性筛选模型,用于识别近期连续加仓且幅度超过流通股份1%的股票,为量化分析提供基础参考。
前言
在前面的内容中,我们已经探讨了如何获取股票的K线数据。今天,我们将目光转向股票的资金流向分析。股价的涨跌本质上是资金推动的结果,而“北上资金”(通过沪股通和深股通进入A市场的资金)往往被视为市场风向标。因此,本文将演示如何抓取北上资金对个股的逐日持仓变动及资金变动情况。
数据分析
首先,我们需要确定数据的访问来源地址:
# 以海尔智家为例贴一下数据的页面连接地址,再次吐槽一下拼音前缀
https://data.eastmoney.com/hsgtcg/StockHdStatistics/600690.html下图展示了北上资金逐日变动的数据页面,我们的目标是抓取其中的持股数量、持股市值、持股百分比以及市值变化等关键信息。

通过浏览器开发者工具查看后台网络请求,可以发现一个特定的接口数据:

该接口所需的参数如下所示:

# 请求地址数据,这里的参数和请求的不太一样,因为其它的参数我试过了,可以忽略掉,以下是必要参数
https://datacenter-web.eastmoney.com/api/data/v1/get?
# 排序字段和排序的类型, -1 为倒序排列
sortColumns=TRADE_DATE
&sortTypes=-1
# 后两个参数比较简单,就是分页参数而已
&pageSize=50
&pageNumber=1
# 报告类型,固定为北上资金数据
&reportName=RPT_MUTUAL_HOLDSTOCKNORTH_STA
# 返回的数据列,默认返回所有
&columns=ALL
# 获取数据参数为股票代码和交易日期
&filter=(SECURITY_CODE="600690")(TRADE_DATE>='2021-10-29')数据抓取
在解析完获取资金所需的参数后,接下来我们将使用 python 来执行数据获取操作,并进行结果展示。在此过程中,我们依然依赖 requets 库来发送HTTP请求。
我们需要首先组装请求参数。注意,这里的 `fliter` 参数仅传入了股票代码,而日期被设定为固定值。这种参数传递方式让我联想到可能是基于ES(Elasticsearch)的查询机制,否则直接这样传参略显生硬。建议后续优化参数转换逻辑,直接传递更友好的格式会更佳。

数据查询返回的结果格式为 json ,解析后我们采用 prettyTable 库来打印输出结果。

由于原始获取的数据未经过格式化,显示的数值位数较长,因此我们对持股数和市值等数据进行了格式化展示处理,
具体实现代码如下:
# 如果是亿级的就格式化为亿,万的话格式化为万
def cal_num(num):
if abs(num / 100000000) > 0:
return str(round(num / 100000000, 3)) + "亿"
else:
return str(round(num / 10000, 3)) + "万"最终我们得到的结果如下所示:

建立模型
既然已经获取到了股票的北上资金持仓情况,我们可以建立一个简单的模型来进行筛选:
- 1. 选取最近一个月内北上资金连续加仓的股票,且加仓幅度超过流通股份的1%。
在这个模型中,理论上可以根据最近一个月每天的持仓百分比建立线性规划模型,利用 y = kx + b 公式来计算斜率和截距。但考虑到实现复杂度,我们可以简化处理:直接计算当天持仓量与一个月前持仓比例的差值即可。
具体代码如下:
# rate_list 为持股比例的集合,将 ratio 添加进集合中,这里为什么是22呢,
# 一般情况下一个月有22个交易日,所以减去22就是一个月前的持仓比例
def cal_model(rate_list):
if len(rate_list) >= 22:
cur_node = rate_list[0]
pre_node = rate_list[22]
return cur_node - pre_node
return -100总结
今天,我们利用接口成功获取了个股北上资金的持仓数据,并建立了一个简单的分析模型来辅助选股。该技术实现相对简单,足以满足学习和练习的需求。
到此这篇关于python爬虫爬取股票的北上资金持仓数据的文章就介绍到这了,更多相关python爬取数据内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









