用Python搞了个基金查询机器人,还可以拓展!

大家好,欢迎来到 Crossin的编程教室 !
今天给大家分享一个综合了数据采集、处理、分析、可视化、接口调用等技术点的项目。
一、说点东西
老早就想搞个基金监控机器人了,方便自己查看自己关注基金的各种指数涨跌情况,及时进行止损或者止盈,今天我们先建楼基,手把手带大家实现一个基金查询机器人,目前主要可以查询基金指定日期段数据和查看基金净值走势图,后面慢慢新增功能。
二、开始动手动脑
2.1 环境准备
Linux、Mac、Windows 都可以
python 3.7及以上
相关第三方包:pandas(数据处理)、requests(爬取数据)、re(文本内容解析)、akshare(获取基金股票数据)、matplotlib(数据可视化)、dataframe-image(dataframe表格转成图片)
2.2 获取指定日期段基金数据
基金数据可以从一些金融相关的网站获取到,比如天天基金网、新浪基金网等,可以自己写爬虫程序获取网站数据,也可以使用现成的工具包获取数据,比如之前介绍过的 和等库。
这里我们同时介绍下两种方法:
2.2.1 回顾下akshare获取基金数据
目前akshare不支持获取指定日期范围内的基金净值数据,但是可以一次获取到基金历史净值数据,调用函数获取基金历史数据,然后自己根据日期选取时间段进行分析。
图片
图片
2.2.2 自己调用现成数据接口
本质上akshare也是从一些金融相关的网站获取到数据,我们也可以自己写代码进行获取,通过浏览器我们很快能搜索到基金数据接口,来自东方财富的天天基金网。
图片
根据指定参数,浏览器会返回指定参数,一段js赋值代码,包括了 基金数据(content)、总记录条数(records)、总页数(pages)、当前页数(curpage)。
格式非常规整,我们可以直接通过正则提取数据,
图片
通过返回的数据可以发现,基金数据部分是一个由table标签包裹的html代码,那我们可以直接使用pandas的read_html来解析数据。
前面有提到,基金数据接口返回数据每页最多展示40条,所以要想获取所有数据,我们可能需要遍历每一页,那么我们还需要通过正则将总页数获取到,然后遍历调用和函数解析出所有数据。
图片
上面两种方法都可以获取到基金净值数据,最后我选择了方式获取,设置一个定时任务,每天三点更新自己关注的基金所有数据,存储到本地,后面要查询的时候直接读取本地文件查询即可。
定时任务:每天早上3点获取所有关注的基金历史数据,存储到本地
获取指定基金 指定日期段 净值数据
2.3 返回数据呈现方式
目前先简单点,设置规则如下:
1)如果数据量小于等于30条,就返回原始数据图
就是直接将获取到的数据转成图片的方式发送给用户,这里我们使用这个第三方包,使用非常简单,pip安装后,直接调用函数即可快速将datafrmae数据转成图片。
为了图片数据更好看,我们还使用了设置数据表格样式(单位净值最大值、最小值高亮和日增长率添加百分号)。
图片
2)如果数据量大于30条,就返回原始数据趋势图
就是将数据可视化下,然后返回给用户,这里我们选择绘制数据的走(趋)势图,使用进行绘制。
这里使用的是折线图,有一些对图片样式的设置,比如:大小、边框、最大/小值标注,但依然不是很美观,后面继续优化。
图片
完整调用
2.4 对接钉钉机器人设置守护程序
目前项目对接了两种机器人:钉钉群机器人和企业机器人,相关配置方法因篇幅原因这里不展开介绍。
钉钉群机器人主要用来汇报每天自动汇报基金数据更新情况,后面还可以加基金涨跌检测情况等。
企业机器人主要用来做基金数据查询自动回复功能,也可以拓展主动发消息给用户。
2.5 最终效果图
指定查询
查看某基金某个时间段内的基金净值数据。(30条以内数据,表格展示;大于30条,趋势图展示)
查询格式:F基金代码 起始日期 结束日期,如:F005827 2021-12-03 2022-02-10
图片
效果图
普通查询
查看某基金近10天内净值和日增长率数据+趋势图
查询格式:F基金代码,如:F005827
图片
最近10天内,只有两个交易日
三、后言后语
这项目说大不大,说小也不小,百行代码。目前基金监测机器人还比较简陋,甚至都没有监测功能(目前只支持数据查询和更新),但是这个楼基很稳、很深,后面添加其他功能会简单、便捷许多,欢迎大家评论区留言,说说你想为这个机器人添加的功能。完整代码在下个版本文章发布时一起分享出来,还请耐心等待。
作者:老表的第一个一百万
来源:简说Python
感谢转发点赞的各位~
_往期文章推荐_
如需了解付费精品课程教学答疑服务
请在Crossin的编程教室内回复:666