PBI实战笔记1:批量爬取web来源公开数据

前言:最近项目上有爬数据需求,好在只需要公开信息,用PBI就可以搞定,故整理了一下爬数步骤,查阅了简书和知乎大佬的文章发现还是会踩坑,这里整理一版详细的记录下来方便理解。

  • 爬数方式:
  1. 爬单页数据并做简单清洗——创建自定义函数——高级编辑器修改函数代码增加参数——生成参数表——求参数笛卡尔积——自定义列引用函数——批量爬取网页数据
  • 目标网址:https://money.finance.sina.com.cn/corp/go.php/vFD_BalanceSheet/stockid/000002/ctrl/2012/displaytype/4.phtml

  • 先介绍第一种方式:

  1. 获取数据——Web
    PBI实战笔记1:批量爬取web来源公开数据_第1张图片
  2. 基本——输入网址
    PBI实战笔记1:批量爬取web来源公开数据_第2张图片
  3. 弹出的界面中发现很多表,逐个查看可以选出需要的表17,这里咱们选【转换数据】。注意,这里选择【加载】和【转换数据】均可,【加载】是指将表17加载到PBI桌面,【转换数据】是指将数据加载到Power Query编辑器。
    PBI实战笔记1:批量爬取web来源公开数据_第3张图片
    PBI实战笔记1:批量爬取web来源公开数据_第4张图片
  4. 为避免后面批量采数出现重复标题行,选择将第一行用做标题
    PBI实战笔记1:批量爬取web来源公开数据_第5张图片
    PBI实战笔记1:批量爬取web来源公开数据_第6张图片
  5. 选中第一列——逆透视其他列(这里逆透视的作用是将二维表转化为一维表,方便分析统计)——替换"–“为"0”

PBI实战笔记1:批量爬取web来源公开数据_第7张图片
PBI实战笔记1:批量爬取web来源公开数据_第8张图片

  1. 右键"表17"查询——创建函数ABC——右键选高级编辑器可查看当前代码
    PBI实战笔记1:批量爬取web来源公开数据_第9张图片

PBI实战笔记1:批量爬取web来源公开数据_第10张图片

  1. 观察【vFD_BalanceSheet/stockid/000002/ctrl/2012】,可确定三个需要创建的参数:类型type,公司代码code,数据年份year
    故将函数代码做如下修改,新建三个参数 :

    源 = (type_ as text,code_ as text, year_ as text) => let   
    	ABC="https://money.finance.sina.com.cn/corp/go.php/vFD_"&type_&"/stockid/"&code_&"/ctrl/"&year_&"/displaytype/4.phtml",
    	源 = Web.BrowserContents(ABC),
    

PBI实战笔记1:批量爬取web来源公开数据_第11张图片

PBI实战笔记1:批量爬取web来源公开数据_第12张图片

  1. 做到这里,已完成自定义函数及参数的创建;然后还需要用于批量采数的参数表,三个参数分别为type/code/year——①点击输入数据,根据采集需求输入参数值即可创建表,注意这里要额外加一列匹配列,用于后面建立三个参数表的笛卡尔积;②将第一行用做标题;③修改表名为type参数。这里要特别注意:参数文本区分大小写

PBI实战笔记1:批量爬取web来源公开数据_第13张图片
PBI实战笔记1:批量爬取web来源公开数据_第14张图片

  1. 同上制作三个参数表如下 :
    PBI实战笔记1:批量爬取web来源公开数据_第15张图片

  2. 三个参数自由组合的结果即我们想要爬取的所有数据,故利用合并查询求三个参数表的笛卡尔积:type&code)——type&code&yearPBI实战笔记1:批量爬取web来源公开数据_第16张图片
    PBI实战笔记1:批量爬取web来源公开数据_第17张图片

  3. 得到合并1:
    PBI实战笔记1:批量爬取web来源公开数据_第18张图片

  4. 继续与year合并,得出新的合并1
    PBI实战笔记1:批量爬取web来源公开数据_第19张图片
    PBI实战笔记1:批量爬取web来源公开数据_第20张图片

  5. 将辅助列删除
    PBI实战笔记1:批量爬取web来源公开数据_第21张图片

  6. 标题重命名
    PBI实战笔记1:批量爬取web来源公开数据_第22张图片

  7. 到这里,3参数的笛卡尔积完成
    PBI实战笔记1:批量爬取web来源公开数据_第23张图片

  8. 添加自定义列——输入公式:=ABC([type],[code],[year])
    PBI实战笔记1:批量爬取web来源公开数据_第24张图片

  9. 查看自定义列采集的数据发现,2021年的数据还没有更新所以报错,所以剔除2021年后再展开列
    PBI实战笔记1:批量爬取web来源公开数据_第25张图片
    PBI实战笔记1:批量爬取web来源公开数据_第26张图片
    PBI实战笔记1:批量爬取web来源公开数据_第27张图片

  10. 成功爬取近三年所有数据
    PBI实战笔记1:批量爬取web来源公开数据_第28张图片

  • 再试试第二种方式
  1. 还是选web获取数据——选"表17"转换数据
    PBI实战笔记1:批量爬取web来源公开数据_第29张图片
    PBI实战笔记1:批量爬取web来源公开数据_第30张图片
  2. 与前一种方法类似数据处理:首行标题——逆透视——“0"替换”–"
    PBI实战笔记1:批量爬取web来源公开数据_第31张图片
  3. 创建参数:type、code、year(参数“类型”必须设为“文本”)
    PBI实战笔记1:批量爬取web来源公开数据_第32张图片
    PBI实战笔记1:批量爬取web来源公开数据_第33张图片
  4. 插入URL字符串:将3个参数插入URL字符串(点击“源”后小齿轮——切换到“高级”——把URL文本中对应的数值,用刚创建的3个参数代替)
    PBI实战笔记1:批量爬取web来源公开数据_第34张图片

PBI实战笔记1:批量爬取web来源公开数据_第35张图片

  1. 创建函数ABC
    PBI实战笔记1:批量爬取web来源公开数据_第36张图片
    PBI实战笔记1:批量爬取web来源公开数据_第37张图片
  2. 创建参数表,合并求笛卡尔积;之后的步骤与方法1相同,建好了笛卡尔积之后添加自定义列,公式一样:=ABC([type],[code],[year]),即可得到近三年数据;
    PBI实战笔记1:批量爬取web来源公开数据_第38张图片
    得到笛卡尔积

PBI实战笔记1:批量爬取web来源公开数据_第39张图片
添加自定义列,得到数据
PBI实战笔记1:批量爬取web来源公开数据_第40张图片

PBI实战笔记1:批量爬取web来源公开数据_第41张图片

总结:对比两种方法,区别其实主要在于参数的处理:方法一直接在源代码修改DAX公式引入参数,方法二通过URL高级选项引入参数;前者绕过新建参数这一步,提高了效率,后者无需直接编辑DAX代码,降低了门槛。

你可能感兴趣的:(#,0013-BI工具,bi,爬虫)