首先透露一下,最近憋着一个大招即将放送。本文主要教大家如何【获取】上市公司的财务数据。这里的【获取】,不是指在从该公司官网上下载pdf版不可编辑加工的财报,而是指快速地获得多家公司可编辑的财报等相关表格和数据。
—— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —
一、Power BI的Web爬虫
尽管各类财经网站(如新浪财经、网易财经、雪球等)上提供了更清晰的表格式三大报表,但很少开放下载功能,或部分需要付费开放。解决这个问题的一个方式是借助爬虫技术。Power BI自带的Web数据源功能,包含了简化的爬虫技术,直接在数据源中输入网址,就能获取上面的数据生成表格。相关说明常见于各大pbi公众号和书籍,这里推荐几篇,不再赘述:
二、付费数据库插件或接口
上述门户网站的财经板块偏向于专门向投资人员直接提供信息,还有一些网站不止于此,它们为用户提供了更深入和详尽且可编辑可复用的数据,比如国泰安数据库CSMAR、东方财富网的Choice数据库、Wind、国外的Quandl等。这些网站偏研究型,往往有专门的软件、插件或接口,为付费用户提供便捷的数据下载方式。如东方财富网除了软件外,还提供excel插件,在excel上就能下载数据。不过这些网站的年费一般数以千计。
三、Tushare接口
根据笔者的经验,无论是用Power BI的Web数据源爬虫功能,还是专业付费网站直接下载,因为表格结构的不统一,以及数据的完整性,对于三大报表的都要进行不同程度的继续清洗。本文特别推荐tushare大数据开放社区(https://tushare.pro,点击文末阅读原文直达)的数据接口。Tushare包含股票、基金、期货、债券、外汇、行业大数据,同时包括了数字货币行情等区块链数据的全数据品类的金融大数据平台,为各类金融投资和研究人员提供适用的数据和工具。对比上述两种方式,tushare优点包括但不限于:
下面提供一段获取利润表的Python代码。如需直接在Power BI里生成表格,我们可以结合前文《Power BI X Python 关联分析(下)》说明在Power Query里进行操作。
# 设置token
ts.set_token('填你的token')
# 初始化接口
pro = ts.pro_api()
# 起止时间
start_date="20150101"
end_date="20200630"
# fields为需要获得的字段,即利润表的科目。注意:最后加上update_flag。取得的数据中,update_flag为1的是更新过的数据。
fields="total_revenue,revenue,int_income,prem_earned,comm_income,n_commis_income,prem_income,out_prem,une_prem_reser,reins_income,n_sec_tb_income,n_sec_uw_income,n_asset_mg_income,oth_b_income,fv_value_chg_gain,invest_income,ass_invest_income,forex_gain,total_cogs,oper_cost,int_exp,comm_exp,biz_tax_surchg,sell_exp,admin_exp,fin_exp,assets_impair_loss,prem_refund,compens_payout,reser_insur_liab,div_payt,reins_exp,oper_exp,compens_payout_refu,insur_reser_refu,reins_cost_refund,other_bus_cost,operate_profit,non_oper_income,non_oper_exp,nca_disploss,total_profit,income_tax,n_income,n_income_attr_p,minority_gain,oth_compr_income,t_compr_income,compr_inc_attr_p,compr_inc_attr_m_s,ebit,ebitda,insurance_exp,undist_profit,distable_profit,basic_eps,diluted_eps,ts_code,ann_date,f_ann_date,end_date,update_flag"
# 调取数据
ic=pro.income(ts_code='600330.SH',start_date=start_date,end_date=end_date,fields=fields)
# 设置token
ts.set_token('填你的token')
# 初始化接口
pro = ts.pro_api()
# 多家公司的代码列表
StockList=["600300.SH","300600.SH","200200.SZ","000500.SZ"]
# 起止时间
start_date="20150101"
end_date="20200630"
# 循环调取
income=pro.income(ts_code="000000")
# fields为需要获得的字段,即利润表的科目。注意:最后加上update_flag。取得的数据中,update_flag为1的是更新过的数据。
fields="total_revenue,revenue,int_income,prem_earned,comm_income,n_commis_income,prem_income,out_prem,une_prem_reser,reins_income,n_sec_tb_income,n_sec_uw_income,n_asset_mg_income,oth_b_income,fv_value_chg_gain,invest_income,ass_invest_income,forex_gain,total_cogs,oper_cost,int_exp,comm_exp,biz_tax_surchg,sell_exp,admin_exp,fin_exp,assets_impair_loss,prem_refund,compens_payout,reser_insur_liab,div_payt,reins_exp,oper_exp,compens_payout_refu,insur_reser_refu,reins_cost_refund,other_bus_cost,operate_profit,non_oper_income,non_oper_exp,nca_disploss,total_profit,income_tax,n_income,n_income_attr_p,minority_gain,oth_compr_income,t_compr_income,compr_inc_attr_p,compr_inc_attr_m_s,ebit,ebitda,insurance_exp,undist_profit,distable_profit,basic_eps,diluted_eps,ts_code,ann_date,f_ann_date,end_date,update_flag"
for i in range(len(StockList)):
ic=pro.income(ts_code=StockList[i],start_date=start_date,end_date=end_date,fields=fields)
income=income.append(ic)
本文分享自 PowerBI x Python 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!