前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何用PowerBI导入网页数据

如何用PowerBI导入网页数据

作者头像
公众号PowerBI大师
发布2019-09-12 15:31:58
3.7K0
发布2019-09-12 15:31:58
举报

相信很多朋友被PBI颜值吸引而入了坑,迫切想上手,但往往会卡在数据源环节。本公司数据自己没权限,外公司数据可望不可及,而网络社区里提供的练习数据,往往专业性太强,业务逻辑摸不透,分析更是无从下手。

那有什么办法能方便快捷地找到贴近我们生活的数据吗?

今天咱们就以随处可见的榜单类数据为例,如何通过PBI来导入网页数据,快速建立属于自己的数据源。


一、导入单页数据(无参数)

单张网页的数据导入,其实马世权老师《从Excel到Power BI商业智能数据分析》一书已有过展示(第97页的3.3章节)。这里咱们换个网页,重新走一遍流程,温故而知新。

这里以当当网图书畅销榜为例(一共25页,每页20本书。本节仅针对第一页)。2019年8月畅销榜网址:http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-month-2019-8-1-1

1. 获取Web数据

2. 复制粘贴网址,确定

3.选中-转换

导航器里出现两张表,很容易就可以判定第一张表就是我们想要的。选中-转换

4. 数据导入成功

根据分析需要,可以在PBI编辑器里作下一步清洗处理(可参见马世权老师《从Excel到Power BI商业智能数据分析》第70页“数据搬运工”章节)

由于网页数据复杂多变,上述步骤三里还会出现大量重复、残缺的表格信息。甚至有时候相同网址,分别用PBI和EXCEL来导入,网页分析结果还有差异。这时就需要耐心仔细,挑选出相对完整的表格数据导入即可。


二、导入多页数据(仅页码参数)

刚才我们成功导入了单页数据,也熟悉了一遍流程。显然单页数据量还达不到数据分析的起步要求,那如何把上述榜单的二十五页明细全部导入呢?

我们在网页的页码链接处前后点几次,观察网址变化就会发现,关键在于网址最后一个数字。http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-month-2019-8-1-1

在网页数据导入的所有步骤中,有两个环节最为重要:

a) 如何判定链接与网址的对应关系。

b) 如何判定网址中哪些是关键字符串。

这两个环节,常规网站一般没什么难度,仔细对比就能找到规律。而有些网页就不那么好对付了(尤其像一些财经类网站,基金/股票的排行榜,可以自己去摸索一下),需要用额外工具来解析,这个不是咱们今天讨论的重点,暂且忽略。

既然找到了关键环节,那问题就简单了。前四个步骤(获取、复制粘贴网址、选中、导入)与导入单页数据相同,不再赘述。我们把已导入的数据表重命名(尽量避免出现诸如表1、查询2、函数3,参数4之类的名称)。

多页数据导入的思路:

  • 先设定参数。 本例固定变化的是页码,因此只1需设置一个页码参数即可;
  • 再来一个自定义函数;
  • 把参数代入函数;
  • 展开函数,得到最终结果。

1234步骤参照单网页导入,我们从步骤5开始

5. 创建页码参数

6.插入页码参数

双击第一步骤“源”后面的小齿轮,打开数据获取界面,切换到“高级”选项。把URL文本的最后一个字符去掉,用刚创建的页码参数代替。

7. 创建自定义函数

在初始表上单击右键,选择“创建函数”菜单。函数名称随意。

8. 创建页码列表

(目的在于告诉PBI,列表里每项数值都代入页码参数,后续调用函数时就能以此生成25个网址字符串,PBI就会根据这些字符串,去自动链接相关网址)

1) 新建“空查询”。

2) 在公式栏里输入“= List.Numbers(1,25,1)”,PBI将生成一个等差数列。其中第一个“1”为起始数字,第二个“25”为尾数,第三个“1”是差额。

3) 在新列表的标题栏里右键“到表”,将列表转换为表(公式栏里的“Table.FromList”是自动生成的)。

4) 将查询名和列表标题栏重命名,方便后续操作辨识。

5) 将该列数据类型转换为“文本”(对应上述步骤5的参数类型),数字便自动靠左对齐。

9. 调用自定义函数

1) 仍然选中“页码列表”,点击“添加列-调用自定义函数”,按下图所示设定。

2) 忽略“隐私级别”。

3) 经过数据加载,结果终于显现。25个页码,每行对应了一个Table,每个Table里都有相应的二十条数据。随意点击一个Table就能看到。

10. 展开函数

点击新列右上角符号,即可展开所有25行共计500条数据。如果大家觉得“Column”太多容易混淆,那就直接在步骤4把数据先清理好,保留或删除哪几列,重命名并指定数据类型等。

虽然只有10个步骤,但对初学者来说,可能操作一趟下来还是一头雾水。

咱们最后再来总结一下。对于多页数据的导入,可以看作中学生列方程式。

1) 先设未知数x(第五步创建参数)

2) 再列方程y=…x…(第七步创建自定义函数)

3) 把x可能出现的值全部写出来(第八步创建页码列表)

4) 把每个x的值代入方程,算出y值(第九步调用自定义函数)

真正的掌握离不开大量练习,只有实操才能进步。除了当当网,再给大家几个网址来练习:

豆瓣电影榜单:https://movie.douban.com/top250

豆瓣音乐榜单:https://music.douban.com/top250

豆瓣读书榜单:https://book.douban.com/top250

全球影史票房榜:https://www.boxofficemojo.com/alltime/world/

国内居民消费价格指数(CPI):http://data.eastmoney.com/cjsj/cpi.html


三、导入更多数据(包含两个以上参数)

两个或两个以上参数的情况,原理也一样。本节将提供两套方案,建议初学朋友把两种方法多操练几次。熟悉的目的不是死搬硬套,而是今后遇到陌生情况,能多一条思路。很多从未碰到过的棘手问题,能开辟新思路的毕竟是少数大咖,咱们普通人一般都是把旧思路老经验多结合几次,基本也能解决。

这回我们拿起点中文网的“原创风云榜”来做演示。

https://www.qidian.com/rank/yuepiao?style=2&page=1

仔细观察这个页面,单就“原创风云榜”就有四个参数:年、月、分类、页码

本节我们只考虑“分类”和“页码”两者组合,年月参数留给各位自己演练实操。只要熟悉了两个参数的导入流程,参数再加几个也没多大难度。

分类共有十四个,每个分类有两页。为了便于对比,我把十四个分类的URL都复制到一起:

这样一看就很清楚了,URL中关于页码的信息是“page=”,分类的信息是“chn=”。既然参数确定了,那二话不说,动手干起来。

实操啦,跟进脚步,同志们!

方案一

1. 获取Web数据

2. 复制粘贴网址,确定

3. 选取表格,点击“转换数据”

4. 数据导入成功后处理

稍微做一些整理:删除最后一列“操作”,把第二列“类别”中的竖括号“「」”替换掉,“表1”重命名为“初始表”。

5. 创建页码参数和分类参数 (参数“类型”必须设为“文本”)

6. 插入URL字符串

回到初始表,将两个参数插入URL字符串(双击第一步骤“源”后面的小齿轮,打开数据获取界面,切换到“高级”选项。把URL文本中分类和页码数值,用刚创建的两个参数代替)

7.创建自定义函数

在初始表上单击右键,选择“创建函数”菜单。函数名称随意。

8. 创建页码列表和分类列表

(与第二章节相同,不再重复截图)新建“空查询”,页码列表公式“= List.Numbers(1,2,1)”,分类列表公式“= List.Numbers(1,22,1)”。本步骤有三个动作千万别忘:查询转换到表;数据类型转换成文本;标题栏重命名“PageList”和“Catalog”。

这儿有个问题。十四个分类数值明明不连续,为什么我在这儿要用公式来生成连续数值。

其实我就是想偷懒。对于参数的不连续数值,可以用“输入数据”来一个个手动输入。我嫌麻烦,不如自动生成连续数值,在后续选取步骤中,把无用数值前复选框的勾去掉即可。

9. 调用自定义函数

本步骤是重点,多参数与单参数的最大不同之处,就在这一步

如果按第二章调用函数的方法,就会发现问题所在。由于存在2个参数,因此调用自定义函数过程中,必须要同时安置两个参数。但无论在“页码列表”还是“分类列表”上调用,对话框里都只出现一个参数选项,这该如何是好?

回顾前面提到的单参数思路,我们把参数当作x,自定义函数看作y,把x的每一个实例数值代入函数,y就能得到一个URL字符串。本章的双参数要实现同样效果,是不是就等同于实现双参数的笛卡尔积呢?

思路有了,那就动手。在“分类列表”上添加自定义列,列公式为“=页码列表”。展开自定义列,得到了我们想要的结果。这时就可以把无用的分类去掉。

10. 展开函数

此时再在“分类列表”上调用自定义函数,便水到渠成。

至此,双参数网页数据的导入操作就完成了。有兴趣的朋友可以自己加入年和月参数继续折腾。

方案二

第二种方案,不用事先导入数据,不用预先设置参数,也不用自定义函数。仅需几步DAX便能实现,简单粗暴。

1. 创建分类列表 此处截图从简,详情可以参考前面章节。

1) 新建“空查询”

2) 输入公式“= List.Numbers(1,22,1)”

3) 转换查询到表

4) 数据类型设为“文本”

5) 标题栏重命名为“分类”

2. 自定义列“起始页码”

前面我们说过,分类和页码列表的目的是为了实现分类和列表数值的笛卡尔积。为了实现这个效果,就需要先添加两个临时列。自定义列“起始页码”,将该列数据类型设为“整数”。

3. 自定义列“结尾页码”

为什么要添加两个临时列?因为我们想通过M语言的Number.From公式,来实现起始页到结尾页的自动填充。同理,在日期场景中,也可以用该公式来填充起始到结束日期之间的每一天。

4. 自定义列“页码”

这里公式“={Number.From([起始页码])..Number.From([结尾页码])}”不是DAX,而是M语言,注意大小写敏感。公式里的列名称,只需在右侧“可用列”里双击即可,不需手动输入。

5. 展开“页码”列,点击“扩展到新行”

6. 完成笛卡尔积

将“页码”列数据类型改为“整数”;将“分类”列无关数值去掉勾选;删除“起始页码”和“结尾页码”两个临时列。笛卡尔积就完成了。

7. 自定义列“URL”

这里我们也用了M语言,注意大小写敏感。公式:

Web.Page(Web.Contents("https://www.qidian.com/rank/yuepiao?style=2&chn="&[分类]&"&page="&[页码]))

8. 展开URL列,仅保留Data勾选。确定后发现还有Table在里面,那就继续展开。第二次展开便得到了最终结果,稍做清理,便大功告成。

是不是眼前一亮?明明八个常规步骤就能解决的问题,非要在前面章节唠叨那么多,小编脑子撞墙了吗?

好吧,你们人多嘴多拳头硬,小编嘴软手软叽叽软,拼不过你们。不过我还是要辩解一番,或许在PBI导入网页数据这块,确实光凭几句DAX和M公式就能快速实现要求,但咱们的目的是什么?前面也讲过,是为了多条思路嘛,预设参数函数这种操作,摸透性格捋顺脾气,或许其他场景就能派上大用处。


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PowerBI大师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档