各大财经网站找了一圈,数据最容易爬取的当选网易财经
资产负债表地址 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
网友评论