对于爬虫大家应该不会陌生,我们首先来看一下爬虫的定义:网络爬虫是一种自动获取网页内容的程序,是搜索引擎的重要组成部分。网络爬虫为搜索引擎从万维网下载网页,自动获取网页内容的应用程序。看到定义我们应该已经知道它是可以从万维网上下载网页解析网页数据的。大家想一下在数据分析情景中它的应用场景有哪些?采集天气数据,网站采集文章,采集各种票务信息,股票信息采集等等有很多地方都会用的爬虫采集数据进行数据分析。通过数据分析增加分析维度信息,尤其是行业数据对标。

  提及爬虫有些软件工程师会第一时间想到Python。Python确实是非常方便的开发软件,会附带大量的依赖库,可以非常简单快速构建爬虫应用程序目前有一些框架只需要写提取规则就可以实现数据提取。我们这里要讲的爬虫是针对PowerBI软件中创建的采集天气数据爬虫程序。很多行业会受天气影响较大,如果能够知道某地区的天气数据历史记录,就可以让销售数据的维度更加丰富。从而给决策者判断问题时做出更好的参考。接下来小黎子将以湖北省主要城市为例,带领大家一起实现PowerBI构建爬虫抓取天气数据历史记录。本案例的数据源来自于网络-天气后报,网页中的数据最简单的一种形式就是表格。通过本文大家可以和我一样实现下图的天气报告

一、分析网站的URL结构

1、确定城市列表URL数据

我要分析的数据是湖北省主要城市的天气,首先在天气后报网站中找到历史天气,点击进入后找到湖北省

2、确定城市的URL信息

打开任意一个城市的界面,可以单独页面内容为武汉市各年度历史天气列表。主要URL中有WUHAN字符。这里我们可以确定每个城市的链接都存在着相同的规律。

3、确定月份的URL信息

点击上图的任意月份,进入月份的天气列表页。通过分析URL地址我们也可以看到规律。URL中城市拼音加年月的变量可以获得各个城市各个月份每天的天气状况。

二、构建爬虫主体

在分析URL过程中我们已经找到了网页URL的规律,因此,我们可以建立城市列表和日期列表。将两个参数引入URL,从而抓取城市不同时间的天气数据。注意,历史天气数据是回顾过去的,天气预报也是一样的分析思路。

1、建立城市列表

2、建立日期列表

在城市列表中添加开始日期

结束日期

日期,注意这里需要将日期转换为数值,提取完成后再转换为日期

展开日期列数据,将格式更改为日期类型

添加年月列

提取年和月数据用于后续切片器

删除重复项

3、将我们处理好的数据赋值到URL中

城市列表和日期列表都已经处理好了,下一步就是处理两个列表和URL的关联关系

新建URL自定义列

忽略隐私检查

展开URL列,选择Source和Data列即可

展开Data列,只保留前四列数据

删除多余的内容,筛选去除标题和空白行

拆分气温为最高和最低气温,按分隔符/拆分

去除温度符号℃,用于转换为数值

处理后

到这里我们已经完成了爬虫的数据清洗工作,接下来就开始进入可视化报告制作。

注意:由于起始日期为2011-1-1下载的数据量比较大,需要等待很长时间。大家可以将起始日期更改为2019-1-1以后的日期加载数据会比较快一点。

三、制作可视化报告

1、制作年份,月份,城市切片器。城市切片器注意设置方向为水平方向

2、气温趋势线

3、天气明细矩阵表

4、区域地图

大家可以根据自己的喜好调整不同的主题颜色

四、总结

我们顺利完成了抓取湖北省各个城市的2019年的历史天气数据。在使用PowerBI爬虫应用时需要注意的点:

1、分析URL规律是开始处理爬虫的最重要的环节

2、通过PowerBI输入数据功能建立城市列表和使用M函数建立日期列表。

3、两个列表结合处理URL地址解析对应的天气数据,通过WEB.CONTENTS提取网页内容是爬虫的核心内容。大家可以继续延伸学习M函数的使用方法。

4、在后续的文章中也会出现少量的M函数使用,编辑器中会有智能提示告诉大家使用规则,大家也可以通过微软官网查看M函数的语法。

注意:PowerBI爬虫应用不只是能够解析这种简单的结构,目前有很多的网站后台都是传递的json数据,PowerBI也是可以应对的处理的,只是需要将JSON数据转换为表格。在后续的分析情景中我会进一步来讲解爬虫应用。

一步一步教你PowerBI利用爬虫获取天气数据分析的更多相关文章

  1. 利用json获取天气信息

    天气预报信息获取是利用json获取的,网上有非常多资源,源码.因为上面涉及到非常多天气信息,包含湿度,出行建议等,以及加入了全部城市代码的资源包.为了练手了解json的原理.我仅获取诚笃城市的最高温, ...

  2. python 利用爬虫获取页面上下拉框里的所有国家

    前段时间,领导说列一下某页面上的所有国家信息,话说这个国家下拉框里的国家有两三百个,是第三方模块导入的,手动从页面拷贝,不切实际,于是想着用爬虫去获取这个国家信息,并保存到文件里. 下面是具体的代码, ...

  3. python利用爬虫获取百度翻译,爱词霸翻译结果,制作翻译小工具

    先看效果展示(仅作学习使用,非商业) 效果图是采用的 爱词霸 翻译,百度翻译 也实现了,只不过被注释了. 学计算机很多时候碰到生词,每次打开手机/浏览器翻译总觉得很麻烦,就想着自己写一个软件,自己去实 ...

  4. 一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app

    一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app 转载 作者:jrainlau 链接:https://segmentfault.com/a/1190000005844155 ...

  5. Ace教你一步一步做Android新闻客户端(一)

    复制粘贴了那么多博文很不好意思没点自己原创的也说不出去,现在写一篇一步一步教你做安卓新闻客户端,借此机会也是让自己把相关的技术再复习一遍,大神莫笑,专门做给新手看. 手里存了两篇,一个包括软件视图 和 ...

  6. 一步一步教你实现iOS音频频谱动画(一)

    如果你想先看看最终效果再决定看不看文章 -> bilibili 示例代码下载 第二篇:一步一步教你实现iOS音频频谱动画(二) 基于篇幅考虑,本次教程分为两篇文章,本篇文章主要讲述音频播放和频谱 ...

  7. 一步一步教你如何在linux下配置apache+tomcat(转)

    一步一步教你如何在linux下配置apache+tomcat   一.安装前准备. 1.   所有组件都安装到/usr/local/e789目录下 2.   解压缩命令:tar —vxzf 文件名(. ...

  8. 一步一步教你将普通的wifi路由器变为智能广告路由器

    一步一步教你将普通的wifi路由器变为智能广告路由器 相信大家对WiFi智能广告路由器已经不再陌生了,现在很多公共WiFi上网,都需要登录并且验证,这也就是WiFi广告路由器的最重要的功能.大致就是下 ...

  9. 一步一步教你使用Git

    一步一步教你使用Git 互联网给我们带来方便的同时,也时常让我们感到困惑.随便搜搜就出一大堆结果,然而总是有大量的重复和错误.小妖发出的内容,都是自己实测过的,有问题请留言. 现在,你已经安装了Git ...

随机推荐

  1. Python--day63--单表的增删改查/GET和POST/request相关知识点回顾

  2. JPA进行insert操作时会首先select吗

    在某个项目中,使用JPA的saveAll方法去批量写入数据时,通过打印sql,发现每次insert前都会先select一次,极大的浪费了写入性能. 分析一下代码,saveAll() @Transact ...

  3. H3C 配置Basic NAT

  4. 前端开发之HTML

    前端 编程主要就是三部分:使用数据,存储数据和处理数据. 什么是前端: 前端就是使用数据的过程,通过规定的格式将服务端的数据在浏览器上更好的展示给用户. 前端的工具: HTML CSS 和 JavaS ...

  5. Python--day46--mysql存储过程(不常用)(包含防sql注入)

    一.存储过程: 优点:只要传很少的数据到数据库就可以了  缺点:dba管理数据库的时候可能会对数据库进行了更改了那一坨sql语句. 二.创建存储过程: 1.简单 创建存储过程: Python中使用结果 ...

  6. H3C 其他OSPF显示命令

  7. 【t002】jam的计数法

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世 ...

  8. java 面试题之银行业务系统

    1.需求 模拟实现银行业务调度系统逻辑,具体需求如下: 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口. 有三种对应类型的客户:VIP客户,普通客户,快速客 ...

  9. HDU 5912 Fraction(模拟)

    Problem Description Mr. Frog recently studied how to add two fractions up, and he came up with an ev ...

  10. P1012 鸡兔同笼问题

    题目描述 笼子里有鸡和兔若干,一直它们共有头 \(n\) 个,有脚 \(m\) 只,问笼中的鸡和兔共有多少只? 输入格式 输入包含两个整数 \(n,m(1 \le n \le 100, 2n \le ...