Power Query M函数(4)--Excel小爬虫之爬网页数据

浏览: 4651

封面.PNG


Power Query以往文章:

Power Query M函数(1)--数据类型及数据结构

PowerQuery M函数2--计算方式与运算符

Power Query M函数(3)--数据类型转换、元数据及错误处理


通过前三节的学习,相信大家已经对M函数的基础知识有了一定的了解,从本节开始,将通过实用案例,为大家逐步介绍M函数的应用方法。

 

本节将为大家介绍的案例是使用Web.Page与Web.Contents函数从PM2.5历史数据网站上爬取不同城市不同日期的历史大气质量相关数据的方法。本方法适用于通过在Power Query中输入网址便可直接获取到所需数据的情况(本案例是指网页地址中有可见表格数据的情况)。

 

在进入正文前,先向大家介绍一种简单获取中文函数帮助信息的方法,方法如下:

1.      在Power Query查询编辑器中新建一个空查询

2.      在编辑栏中输入=#shared

1.png

3.      点击“到表中”

4.      通过对Name字段进行筛选的方法来获取相关的函数帮助信息



Web.Page与Web.Contents函数说明:

1.      Web.Page函数:返回HTML文档的内容(分解为其组成结构),以及完整文档的表示形式及其删除标记后的文本

 

表达式:Function(html as any) as table

 

注释:使用Web.Page函数可以获取到HTML形式网页内的相关信息,并以表的形式返回结果

 

2.      Web.Contents函数:将从url下载的内容返回为二进制。可以提供可选记录参数options以指定其他属性。记录可以包含以下字段……(内容较多省略,详细说明请通过#shared查询)

 

表达式:Function (url as text, optional options as nullable record) asbinary

 

注释:付给Web.Contents网页地址后,Web.Contents函数可以将网页内的信息以二进制数的形式返回

 

将两个函数嵌套使用Web.Page(Web.Contents(网址))后变可将网页内的信息最终以表的形式呈现出来。运算逻辑是先用Web.Contents函数获取指定网址内的二进制信息,再用Web.Page函数对二进制信息进行转换、解析,最终获得我们所能够理解的表形式数据。



爬取PM2.5历史数据网页内各城市过去每天的历史大气质量数据:

2.png

网页主地址:https://www.aqistudy.cn/historydata/

 

所需要的日均空气质量数据(以北京2014年1月份为例):


网页地址:https://www.aqistudy.cn/historydata/daydata.php?city=北京&month=2014-01

 

使用Power Query对上述网页进行爬取的目的是能够批量一次性爬取多个城市各不同月份下的不同日期的大气质量历史数据。

  

爬取步骤如下:

1.      对网址特点进行分析后,发现只要将city=后边的部分改为想要的城市名,再将month=后边的部分改为想要的月份数字就可以打开不同城市,不同月份下的日历史数据网页

2.      所以我们现在Excel表格界面建一个包含城市名和月份信息的表,并将其添加到Power Query中

    

3.      将[月份]字段转换为文本型数据

4.      在Power Query编辑器中添加自定义列,内容如下:


公式内容:

Web.Page(Web.Contents("https://www.aqistudy.cn/historydata/daydata.php?city="&[城市]&"&month="&[月份]))

5.      点击“继续”后选择“公共”并保存(数据量较大需耐心等待,练习时建议只做两个城市的数据)

         

6.      展开自定义字段中的Data


7.      再次展开自定义字段中的相关字段(从日期到排名)


8.      关闭并上载

 

上述内容就是爬取网页信息的全部步骤。好了,来看一下爬取到的数据吧。

      



报名用数据说话-Excel BI商业智能分析零基础精讲课程系统学习Excel商业智能分析相关知识

推荐 2
本文由 李奇 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

2 个评论

这个不错,可以的额
多谢梁总,持续更新中。

要回复文章请先登录注册