用 Python 爬取各类基金数据并动态展示

以下文章来源于Python爬虫数据分析挖掘 ,作者李运辰

Python爬虫数据分析挖掘

四年的编程开发爱好者,分享日常编程学习和接私活过程,记录生活,共同进步。关注小白,编程快乐

01

前言

去年接触基金,体会到了基金的香(真香),这几天也是过年后开始交易的日子,今天爬取『蛋卷基金』数据,通过pyecharts动图可视化方式展示基金的涨跌情况。

本文将围绕这三点去进行爬取数据,动图可视化展示数据:

  • 近一月涨跌幅前10名
  • 基金各个阶段涨跌幅
  • 近30个交易日净值情况

02

数据获取

数据来源

本文的数据来源:『蛋卷基金』

https://danjuanapp.com/

看过我之前的这篇文章酱香科技!用 Python 分析白酒类基金有多赚钱!都学会了怎么在『蛋卷基金』爬取数据(ajax异步交互方式),不会的可以去看看,文中有详细步骤!!!

数据分析

接下爬取的数据涉及五大类(五种基金)

  1. 股票型基金
  2. 混合型基金
  3. 债券型基金
  4. 指数型基金
  5. QDII型基金

通过抓包分析ajax异步交互链接的规律:

  • type是对应的五种基金的代号
  • order_by是对应最近多久的基金涨跌幅排序
'近一周':'1w''近一月':'1m''近三月':'3m''近六月':'6m''近1年':'1y''近2年':'2y''近3年':'3y''近5年':'5y'
  • page是对应的页数,从第1页开始

备注:『蛋卷基金』这个网站没有反爬!!!,请求不需要cookie!!!

ok,这些都清楚之后,接下来就可以开始爬取数据了!

03

数据可视化

由于『蛋卷基金』这个网站没有反爬!!!,所以数据爬取和可视化分析放一起了(直接爬取数据后就进行可视化!)

分析1:近一月涨跌幅前10名

爬虫代码

###基金类型dict_type={'股票型':1,'混合型':3,'债券型':2,'指数型':5,'QDII型':11}###时间dict_time={'近一周':'1w','近一月':'1m','近三月':'3m','近六月':'6m','近1年':'1y','近2年':'2y','近3年':'3y','近5年':'5y'}for key in dict_type: url = 'https://danjuanapp.com/djapi/v3/filter/fund?type='+str(dict_type[key])+'&order_by=1w&size=10&page=1' res = requests.get(url, headers=headers) res.encoding = 'utf-8' s = json.loads(res.text) s = s['data']['items'] name = [] value = [] for i in range(0,len(s)): print(s[i]['fd_name']+':'+s[i]['yield']) name.append(s[i]['fd_name']) value.append(s[i]['yield']) ###开始绘图 pie(name, value, str(key)+'基金涨跌幅', '['+str(key)+']基金近一月涨跌幅前10名')

饼状图可视化代码

###饼状图def pie(name,value,picname,tips):    c = (        Pie()            .add(            '',            [list(z) for z in zip(name, value)],            # 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标            # 默认设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度            center=['35%', '50%'],        )            .set_colors(['blue', 'green', 'yellow', 'red', 'pink', 'orange', 'purple'])  # 设置颜色            .set_global_opts(            title_opts=opts.TitleOpts(title=''+str(tips)),            legend_opts=opts.LegendOpts(type_='scroll', pos_left='70%', orient='vertical'),  # 调整图例位置        )            .set_series_opts(label_opts=opts.LabelOpts(formatter='{b}: {c}'))            .render(str(picname)+'.html')    )

这里将饼状图可视化代码封装成函数,绘制五种基金的饼状图只需调用这个函数即可

###开始绘图pie(name, value, str(key)+'基金涨跌幅', '['+str(key)+']基金近一月涨跌幅前10名')

1.股票型基金

2.混合型基金

3.债券型基金

4.指数型基金

5.QDII型基金

分析

上图中是五大类基金的选取近一个月涨跌幅最高前10名的基金进行绘图。

同理近一周、近三个月、近一年也可以通过这个代码进行绘制,只需要将参数order_by修改即可

'近一周':'1w''近一月':'1m''近三月':'3m''近六月':'6m''近1年':'1y''近2年':'2y''近3年':'3y''近5年':'5y'

分析2:基金各个阶段涨跌幅

上面分析中可以清楚这五类基金近一个月最高的涨跌幅排名情况,下面从排名中选取第一名基金(五类中各选取第一名)分别展示该基金各个阶段的涨跌幅情况

阶段情况:

'近一周':'1w''近一月':'1m''近三月':'3m''近六月':'6m''近1年':'1y''近2年':'2y''近3年':'3y''近5年':'5y'

爬虫代码

####分析2:基金各个阶段涨跌幅def analysis2():    name =['近1周','近1月','近3月','近6月','近1年','近3年','近5年']    ##五类基金    dict_value={}    for key in dict_type:        #### 获取排名第一名基金代号        url = 'https://danjuanapp.com/djapi/v3/filter/fund?type='+str(dict_type[key])+'&order_by=1w&size=10&page=1'        res = requests.get(url, headers=headers)        res.encoding = 'utf-8'        s = json.loads(res.text)        ###取第一名        fd_code = s['data']['items'][0]['fd_code']        #### 获取排名第一名基金各个阶段情况        fu_url = 'https://danjuanapp.com/djapi/fund/derived/'+str(fd_code)        res = requests.get(fu_url, headers=headers)        res.encoding = 'utf-8'        s = json.loads(res.text)        data = s['data']        valuess=[]        ####防止基金最长时间不够1年、2年、5年的情况报错,用0填充        ##近1周        try:            valuess.append(data['nav_grl1w'])        except:            valuess.append(0)        ##近1月        try:            valuess.append(data['nav_grl1m'])        except:            valuess.append(0)        ##近3月        try:            valuess.append(data['nav_grl3m'])        except:            valuess.append(0)        ##近6月        try:            valuess.append(data['nav_grl6m'])        except:            valuess.append(0)        ##近1年        try:            valuess.append(data['nav_grl1y'])        except:            valuess.append(0)        ##近3年        try:            valuess.append(data['nav_grl3y'])        except:            valuess.append(0)        ##近5年        try:            valuess.append(data['nav_grl5y'])        except:            valuess.append(0)        ###添加到集合中        dict_value[key]=valuess    bars(name,dict_value)

可视化代码

###柱形图def bars(name,dict_values): # 链式调用 c = ( Bar( init_opts=opts.InitOpts( # 初始配置项 theme=ThemeType.MACARONS, animation_opts=opts.AnimationOpts( animation_delay=1000, animation_easing='cubicOut' # 初始动画延迟和缓动效果 )) ) .add_xaxis(xaxis_data=name) # x轴 .add_yaxis(series_name='股票型', yaxis_data=dict_values['股票型']) # y轴 .add_yaxis(series_name='混合型', yaxis_data=dict_values['混合型']) # y轴 .add_yaxis(series_name='债券型', yaxis_data=dict_values['债券型']) # y轴 .add_yaxis(series_name='指数型', yaxis_data=dict_values['指数型']) # y轴 .add_yaxis(series_name='QDII型', yaxis_data=dict_values['QDII型']) # y轴 .set_global_opts( title_opts=opts.TitleOpts(title='涨跌幅', subtitle='李运辰绘制', # 标题配置和调整位置 title_textstyle_opts=opts.TextStyleOpts( font_family='SimHei', font_size=25, font_weight='bold', color='red', ), pos_left='90%', pos_top='10', ), xaxis_opts=opts.AxisOpts(name='阶段', axislabel_opts=opts.LabelOpts(rotate=45)), # 设置x名称和Label rotate解决标签名字过长使用 yaxis_opts=opts.AxisOpts(name='涨跌点'), ) .render('基金各个阶段涨跌幅.html') )

分析

从上面动图可以清楚这五类基金第一名基金各个阶段的涨跌幅情况。

有的基金最长时间没有达到3年或者5年,这里使用填充0处理。

分析3:近30个交易日净值情况

同理,上面分析中可以清楚这五类基金近一个月最高的涨跌幅排名情况,下面从排名中选取第一名基金(五类中各选取第一名)分别展示该基金近30个交易日净值情况。

爬虫代码

####分析3:近30个交易日净值情况def analysis3():    for key in dict_type:        #### 获取排名第一名基金代号        url = 'https://danjuanapp.com/djapi/v3/filter/fund?type=' + str(            dict_type[key]) + '&order_by=1w&size=10&page=1'        res = requests.get(url, headers=headers)        res.encoding = 'utf-8'        s = json.loads(res.text)        ###取第一名        fd_code = s['data']['items'][0]['fd_code']        #### 获取排名第一名基金近30个交易日净值情况        fu_url = 'https://danjuanapp.com/djapi/fund/nav/history/'+str(fd_code)+'?size=30&page=1'        res = requests.get(fu_url, headers=headers)        res.encoding = 'utf-8'        s = json.loads(res.text)        data = s['data']['items']        name=[]        value=[]        for k in range(0,len(data)):            name.append(data[k]['date'])            value.append(data[k]['nav'])        silder(name, value,key)

可视化代码

###拉伸图def silder(name,value,tips): c = ( Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)) .add_xaxis(xaxis_data=name) .add_yaxis(tips, yaxis_data=value) .set_global_opts( title_opts=opts.TitleOpts(title=str(tips)+'近30个交易日净值情况'), datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_='inside')], ) .render(str(tips)+'近30个交易日净值情况.html') )

1.股票型

2.混合型

3.债券型

4.指数型

5.QDII型

分析

从上面动图可以清楚这五类基金第一名基金近30个交易日净值情况

04

总结

以上就是爬取基金数据并通过pyecharts动图可视化方式展示基金的涨跌情况。

围绕这三点去进行爬取数据,动图可视化展示数据:

  • 近一月涨跌幅前10名
  • 基金各个阶段涨跌幅
  • 近30个交易日净值情况
(0)

相关推荐

  • bar库 pyecharts

    Pyecharts V1全新版本使用教程--Bar(柱状图的使用) 以下内容均来自Pyecharts官方使用文档(可自行阅读)和自己的理解: 官方链接:https://pyecharts.org/#/ ...

  • pyecharts丨页面布局工具

    让多张图表展示在同一页面 一. 令图表垂直布局--Page 二. 令图表水平布局--Grid P.S. 如何让两个饼图平行排列? P.P.S. 如何让两张纯图片平行排列? P.P.P.S 如何让两个词 ...

  • 一键生成微信个人专属报告!

    官网:www.youquhome.cn 这两天在逛GitHub的时候发现了一个非常有趣的开源项目,利用python对个人微信好友进行全方位的数据分析,具体内容是昵称.年龄.性别.地区等,通过可视化的图 ...

  • Python中django.db.models.Model方法

    Python中django.db.models.Model方法的用法:示例1: model_format_dict123456789101112131415161718# 需要导入模块: from d ...

  • 又一个可视化神器Highcharts,Python版也有哦!

    价值前瞻 91篇原创内容 公众号 来源:Python数据之道 作者:Peter 整理:Lemon 本文重点介绍的是可视化库 Highcharts 的相关基础知识,以及如何利用Highcharts来绘制 ...

  • Flask

    Flask 本指南介绍了如何在 Flask 中使用 pyecharts. Flask 模板渲染 Step 0: 新建一个 Flask 项目 $ mkdir pyecharts-flask-demo$ ...

  • 爬取1907条『课程学习』数据,分析哪类学习资源最受大学生青睐

    爬取1907条『课程学习』数据,分析哪类学习资源最受大学生青睐

  • 基于Pyecharts可视化大屏案例一(3)

    上两篇文章<基于Pyecharts可视化大屏案例一(1)><基于Pyecharts可视化大屏案例一(2)>已经为大家详细展示了大屏大致的制作过程以及可视化大屏的布局,接下来继续 ...

  • pyecharts生成各种图表

    pyecharts的使用 pyecharts 是一个用于生成 Echarts 图表的类库. echarts 是百度开源的一个数据可视化 JS 库,主要用于数据可视化.pyecharts 是一个用于生成 ...

  • 基金大涨后立即卖掉是否可行?

    我的观点: 基金大涨后一定要卖掉,但不是全卖,而是卖掉该基金持仓的10%-20%! 我自己就是这么操作的,虽然基金只玩了1年多,但股票炒了快5年了.股票和基金有很大不同,但股票技巧里的做T完全可以用在 ...

  • Python可视化之Pyecharts神器(三)

    一.数据读取 import pandas as pd import pymysql config = {           'host':'localhost',           'port': ...

  • python爬取7w+『赘婿』弹幕,发现弹幕比剧还精彩!

    python爬取7w+『赘婿』弹幕,发现弹幕比剧还精彩!