美文网首页PowerBI大师
如何用PowerBI自定义函数批量爬取财务报表

如何用PowerBI自定义函数批量爬取财务报表

作者: 乐见数据 | 来源:发表于2019-10-27 09:17 被阅读0次
    近期,学习了马老师的商业智能财务分析(PowerBI)课程后,不免手痒,教学中的案例数据不过瘾,于是在PowerBI学友的启发下,自己找现实数据玩了起来。那么今天的文章主要内容是怎样从PBI批量爬取在线的财务报表数据。直接进入正题。   1 了解数据源
    各大财经网站找了一圈,数据最容易爬取的当选网易财经
    资产负债表地址 http://quotes.money.163.com/f10/zcfzb_000333.html

    上市公司代码表下载地址(PDF 文件): http://www.csrc.gov.cn/pub/newsite/scb/ssgshyfljg/201902/t20190212_350821.html 证监会官网找到的所有上市公司明细,可在PowerBI中选择PDF为数据源获取

    2 数据导入
    1)科目表


    2)资产负债表数据


    3)上市公司股票代码表

    3 数据标准化
    由于网易数据源的缘故,财务报表的科目明细和整体数值是分开的,那就分别作为维度表和事实表,都增加索引列,在模型建模建立连接即可。

    由于资产负债表数据为二维表,我们需要用逆透视把它变成一维表(提升标题后 - 选中索引列 - 逆透视其他列),再删除掉值中的空值

    对于从PDF文件获取的上市公司股票代码表,可删除默认出现的“更改的类型”步骤,因为股票代码有很多以0开头,需要以ABC文本格式才能显示出来。

    前三列利用向下填充补充数据


    到此单张表的数据清洗工作完成。
    4 批量爬取其他公司报表
    观察下网址结构,一串文字+股票代码,逻辑简单。那通过“上市公司行业分类表”中的股票代码便可批量导入


    第一步,建立参数:取名“Web”

    当前值可设置为当前股票代码 000333


    第二步,在资产负债表的“查询设置”的源中,将代码中 000333替换为 
    "&Text.From(Web)&"
    即首行公式为
    =Web.BrowserContents("http://quotes.money.163.com/f10/zcfzb_"&Text.From(Web)&".html")

    第三步,创建自定义函数,取名zcfcb



    第四步,在从PDF文件获取的上市公司股票代码表中做筛选,考虑股票代码很多,获取全部数据非常耗时,我们先只筛选前3只股票

    选择“添加列”调用自定义函数,增加一列。


    字段“zcfcb”的每一个单元格中的Table都是一张完整的资产负债表数据,这种方案是先解决局部,再向上逐一击破,打开表格就是完整的数据。

    加载数据后,几张表建立关系。

    现金流量表、利润表也照此方法搞定。
    5 进一步思考
    刚刚Demo的测试,我们只选取了3家公司,一切都很完美,那如果将3500+家上市公司都加载进来,批量爬取将会发生什么?
    很慢!在增加了两个数量级之后,PBI爬取数据的软肋就凸显出来,读取网页表格变得非常缓慢,仅资产负债就有将近500万+行数据,全部加载到PBI耗时两个小时,一度让我非常抓狂。
    缺失!由于一些不知的原因,在爬取过程中存在一些上市公司的数据缺失,返回的是空表。而且测试中发现有不稳定的情况,同一只股票单独可以抓取到数据,但放在参数里出现了错误。
    6 总结
    PBI的PowerQuery虽然可以批量读取数据,但它更适合对接数据库,CSV这些确定的数据源。对于获取网页数据,它对数据的结构要求非常高。我们通过案例体验式地学会PowerQuery的特性和功能,但实际工作中对于大范围爬取网页数据的需求,建议尝试其他更专业的爬虫工具。  

    —— End ——

    相关阅读:


    用PBI分析上市公司财务数据(一)

    用PowerBI分析上市公司财务数据(二)


    如何用PowerBI导入网页数据


    加入社群,成为分享者、创作者请联系小编微信:beyondexcel

    相关文章

      网友评论

        本文标题:如何用PowerBI自定义函数批量爬取财务报表

        本文链接:https://www.haomeiwen.com/subject/xujpvctx.html