本节要点: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
更改的类型
“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()”这个函数(这个函数的作用就是为了提取网页的数据),把前面一列的值引入进来,即:“”。
得到如下结果:
数据源获取到了,我们扩展即可。
插入切片器,可以进行灵活的查询。
缺点:速度奇慢。