博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
32、Power Query-利用自定义函数获取指定页数数据
阅读量:2035 次
发布时间:2019-04-28

本文共 1327 字,大约阅读时间需要 4 分钟。

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

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

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

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

实例网站:

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

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

比如我们将这个“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()”这个函数(这个函数的作用就是为了提取网页的数据),把前面一列的值引入进来,即:“”。

得到如下结果:

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

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

缺点:速度奇慢。

你可能感兴趣的文章
go学习笔记(3结构体)
查看>>
Go学习笔记(4语言切片(Slice))
查看>>
go是面向对象语言吗?
查看>>
golang 格式“占位符”%d,%f,%s等应用类型
查看>>
GO语言学习系列九——GO的结构(struct)与方法(method)
查看>>
Go 单例模式
查看>>
由浅入深剖析 go channel
查看>>
go的切片下标取值
查看>>
Go语言并发与并行学习笔记(一)
查看>>
go channel的小例子
查看>>
Go by Example / Golang入门教程(非常详细)
查看>>
千万级并发实现的秘密:内核不是解决方案,而是问题所在!
查看>>
Golang适合高并发场景的原理
查看>>
GO性能优化小结
查看>>
MYSQL千万级大数据SQL查询优化
查看>>
golang 中 sync.Mutex 和 sync.RWMutex
查看>>
SpringBoot中获取spring.profiles.active的值
查看>>
mysql死锁-非主键索引更新引起的死锁
查看>>
不恰当的update语句使用主键和索引导致mysql死锁
查看>>
Cobertura 好像不支持java1.8
查看>>