【Python网络爬虫与数据可视化实战案例】未来15天气温走势图
需求描述
打开天气网,点击上方城市名称,再点击“15天天气”,进入如下页面。这里以天津为例。
可以看到,这里是有未来15天的天气和气温状况的。我们要做的就是把每天的最高和最低气温爬取下来,并做成折线图的形式。
需求分析
任意选取一天的气温,单击鼠标右键检查元素(这里我使用的是Firefox浏览器,不同浏览器可能略有不同)进入查看器。我们得到了下图所示的HTML结构。
可以看出,每一天的天气信息都存储在class
属性为table_day
的div
标签之中,而气温信息则存储在div
标签内部的class
属性为temp
的li
标签之中。那么,我们只需要定位到这个标签,对该标签内的文本进行提取,即可获得这15天的最高气温和最低气温。
代码实现
首先我们需要导入相关的模块。
import re
import requests
from pyecharts import Line
from bs4 import BeautifulSoup
对网站发起请求,获取页面的数据。即进行UA伪装后对URL发起GET请求。
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0'}
url = 'https://www.tianqi.com/tianjin/15/'
response = requests.get(url=url, headers=headers)
page_text = response.text
筛选出有关气温信息的内容。
在筛选出class
属性为temp
的li
标签的文本之后,我使用了正则表达式来分离最高气温值与最低气温值,并保存到对应的列表中。以波浪线作为切入点,波浪线前的数字即为最低气温,波浪线后的数字即为最高气温。获取正则匹配的文本之后,对字符串进行切片,然后使用eval()
函数将其转化为数字形式存放在列表中。
soup = BeautifulSoup(page_text, 'html.parser')
div_list = soup.find_all(class_='box_day')
table_day_list = div_list[0].find_all(class_='table_day')
low_temp = []
high_temp = []
for i in range(len(table_day_list)):li = table_day_list[i].find(class_='temp').textlow = eval(re.search(r'(\d*)~', li).group()[:-1])low_temp.append(low)high = eval(re.search(r'~(\d*)', li).group()[1:])high_temp.append(high)
最后一步,使用pyecharts模块进行数据可视化。
这里我偷了个懒,attr
列表中的内容是可以在筛选数据的过程中一并获取的。写代码的时候为了方便就自己写了attr
列表。这样写有个缺点,就是在做下一次的15天气温预报的时候需要手动更改attr
列表中的元素。
attr = ['2020-04-16', '2020-04-17', '2020-04-18', '2020-04-19', '2020-04-20', '2020-04-21', '2020-04-22', '2020-04-23','2020-04-24', '2020-04-25', '2020-04-26', '2020-04-27', '2020-04-28', '2020-04-29', '2020-04-30']
line = Line('天津未来15天的气温走势', '日期:2020-04-16至2020-04-30')
line.add('日最低气温', attr, low_temp, is_smooth=False, mark_point=['min'], mark_line=['average'])
line.add('日最高气温', attr, high_temp, is_smooth=False, mark_point=['max'], mark_line=['average'])
line.render('天津未来15天气温走势图.html')
完整代码及结果展示
该样例的完整代码如下:
#!/usr/bin/env python3import re
import requests
from pyecharts import Line
from bs4 import BeautifulSoup# 爬取天气网天津2020-04-16至2020-04-30的最高和最低气温
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0'}
url = 'https://www.tianqi.com/tianjin/15/'
response = requests.get(url=url, headers=headers)
page_text = response.text# 筛选出所需数据
soup = BeautifulSoup(page_text, 'html.parser')
div_list = soup.find_all(class_='box_day')
table_day_list = div_list[0].find_all(class_='table_day')
low_temp = []
high_temp = []
for i in range(len(table_day_list)):li = table_day_list[i].find(class_='temp').textlow = eval(re.search(r'(\d*)~', li).group()[:-1])low_temp.append(low)high = eval(re.search(r'~(\d*)', li).group()[1:])high_temp.append(high)# 数据可视化
attr = ['2020-04-16', '2020-04-17', '2020-04-18', '2020-04-19', '2020-04-20', '2020-04-21', '2020-04-22', '2020-04-23','2020-04-24', '2020-04-25', '2020-04-26', '2020-04-27', '2020-04-28', '2020-04-29', '2020-04-30']
line = Line('天津未来15天的气温走势', '日期:2020-04-16至2020-04-30')
line.add('日最低气温', attr, low_temp, is_smooth=False, mark_point=['min'], mark_line=['average'])
line.add('日最高气温', attr, high_temp, is_smooth=False, mark_point=['max'], mark_line=['average'])
line.render('天津未来15天气温走势图.html')
运行这个程序可以得到一个HTML文件。使用浏览器打开,得到下图所示的结果:
【Python网络爬虫与数据可视化实战案例】未来15天气温走势图相关推荐
- 【Python网络爬虫与数据可视化实战案例】近15年的中国国内生产总值
需求描述 打开东方财富网的中国国内数据总值数据页,进入如下页面. 现在需要把页面上的国内生产总值数据表爬取下来,写入CSV文件以持久化存储.在这之后,将CSV文件内的数据做成折线图,实现数据可 ...
- python pandas_Python库Pandas数据可视化实战案例
点击上方"爱好Python的胡同学",选择"星标"公众号 每晚八点,Python干货,不见不散! 数据可视化可以让我们很直观的发现数据中隐藏的规律,察觉到变量之 ...
- Python网络爬虫及数据可视化(软科中国大学专业排名|计算机科学与技术)
设计内容: 对中国大学专业排名网站中2021年,计算机科学与技术专业,进行数据爬取和数据可视化. URL地址:https://www.shanghairanking.cn/rankings/bcmr/ ...
- Python实验1——网络爬虫及数据可视化
Python实验1--网络爬虫及数据可视化 一.实验目标与基本要求 实验目标 基本要求 二.主要知识点.重点与难点 主要知识点 重点 难点 三.实验过程设计 获取网页 获取数据 保存到数据库 数据预处 ...
- Python 网络爬虫笔记11 -- Scrapy 实战
Python 网络爬虫笔记11 – Scrapy 实战 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Py ...
- Python库Pandas数据可视化实战案例
>关注公众号:大数据技术派,回复`资料`,领取`1024G`资料. 数据可视化可以让我们很直观的发现数据中隐藏的规律,察觉到变量之间的互动关系,可以帮助我们更好的给他人解释现象,做到一图胜千文的 ...
- Python网络爬虫基础进阶到实战教程
文章目录 认识网络爬虫 HTML页面组成 Requests模块get请求与实战 效果图 代码解析 Post请求与实战 代码解析 发送JSON格式的POST请求 使用代理服务器发送POST请求 发送带文 ...
- Python网络爬虫之数据解析(二)
学习笔记,续上篇 八.正则表达式解析HTML网页 8.1 正则表达式介绍 什么是正则表达式: 通俗理解:按照一定的规则,从某个字符串中匹配出想要的数据,这个规则就是正则表达式. 标准答案:https: ...
- 数据分析从零到精通第三课 python自动化和BI数据可视化实战
05 效率提升:如何通过邮件报表释放人力 本课时主要分享从零搭建数据邮件日报系统的方法,从而满足业务方的定期数据需求.希望通过本课时的介绍,你可以立刻在自己机器上实践定时邮件发送的任务. 邮件日报的业 ...
最新文章
- 「CF622F」The Sum of the k-th Powers「拉格朗日插值」
- Android 11 修改libcore update-api 遇到的问题
- goole机器学习视频链接【学习笔记】
- 去银行存款,银行打印错日期,到期之后才发现,利息该怎么算?
- Spring Boot Oauth2安全性
- 一些adb的常用命令
- php更改tittle,phpcms V9修改默认title标签
- 程序员常用字体(vs2008配色方案)
- linux qt遍历设备,Qt获取设备环境变量
- 禁用联想笔记本电脑自带的键盘
- LS-DYNA基础理论
- 汽车中控语音导航服务器繁忙,交警大队智能语音导航系统解决方案
- Gym 100015A
- 综合函数矩量法原理及实现思路
- 基于MATLAB APP Designer 和 Python 的音视频剪辑App_02
- 短链接的生成之工具类的编写--三种方式(亲测可用)
- 根据Email地址跳转到邮箱登录界面
- 广告投放相关专业名词整理
- ActiveX控件打包cab时INF文件的编写
- win10开机黑屏一会1-2秒后进入桌面的原因总结和解决方式。