32、Power Query-利用自定义函数获取指定页数数据

本节要点:Power Query-利用自定义函数获取指定页数数据

我们前面不是有一节已经讲过如何获取网页的数据了么?

http://blog.csdn.net/zhongguomao/article/details/53908101


细心的朋友或许已经发现,之前获取的网页数据比较不灵活,仅仅是当前页面的数据,若是有好多页的数据,之前的方法貌似不好使。

今天我们就简单的带大家认识一下Power Query里“M语言”的自定义函数的应用。

实例网站:http://union.mop.com/rank?pageNum=1&type=


可以看到这里的数据不止一页,我们如何去动态获取这些记录。

我们从这个网址上分析得出,这个页码是根据下图进行动态变动:


比如我们将这个“1”改为“2”。


即显示了第二页的所有20条记录。


接下来的重点就是如何去动态构造这些页码呢?

答案自然存在于我们的“高级编辑器”里面。


let
    源 = Web.Page(Web.Contents("http://union.mop.com/rank?pageNum=2&type=")),
    Data0 = 源{0}[Data],
    更改的类型 = Table.TransformColumnTypes(Data0,{{"排名", Int64.Type}, {"联盟名称", type text}, {"等级", Int64.Type}, {"人口", Int64.Type}, {"声望", Int64.Type}, {"盟主", type text}})
in
    更改的类型

我们简单看一下代码结构,从“let”到“in”发现其实PQ的每一个步骤都是用一个函数来构成的,说底层一点,PQ就是由无数个函数集堆积而成的。

“in”则是返回最后一步。

接下来我们需要自定义函数,现在我们对这个语言还不是很熟,先依葫芦画瓢。


let Getdata = (pg)=>


let
    源 = Web.Page(Web.Contents("http://union.mop.com/rank?pageNum="&pg&"&type=")),
    Data0 = 源{0}[Data],
    更改的类型 = Table.TransformColumnTypes(Data0,{{"排名", Int64.Type}, {"联盟名称", type text}, {"等级", Int64.Type}, {"人口", Int64.Type}, {"声望", Int64.Type}, {"盟主", type text}})
in
    更改的类型


in
    Getdata

我们试一下调用第一页。



发现这个类型不同报错了。网址中需要的是文本型的“1”,看来是需要函数来转换,我们暂且不管。

我们改名为“page”,从右侧可以看到,有一个步骤是“Getdata”。

这个时候我们新建一个空查询,比如要查询前10页的数据。


我们的目的是要让这1~10赋值到上面的参数里面,进行获取数据源。

它有两个要求:

1、必须要求是文本Text;

2、增加一列,引入这个函数;


使用的是“page()”这个函数(这个函数的作用就是为了提取网页的数据),把前面一列的值引入进来,即:“”。


得到如下结果:


数据源获取到了,我们扩展即可。

插入切片器,可以进行灵活的查询。


缺点:速度奇慢。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP剑客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值