需求描述

  打开天气网,点击上方城市名称,再点击“15天天气”,进入如下页面。这里以天津为例。


  可以看到,这里是有未来15天的天气和气温状况的。我们要做的就是把每天的最高和最低气温爬取下来,并做成折线图的形式。

需求分析

  任意选取一天的气温,单击鼠标右键检查元素(这里我使用的是Firefox浏览器,不同浏览器可能略有不同)进入查看器。我们得到了下图所示的HTML结构。

  可以看出,每一天的天气信息都存储在class属性为table_daydiv标签之中,而气温信息则存储在div标签内部的class属性为templi标签之中。那么,我们只需要定位到这个标签,对该标签内的文本进行提取,即可获得这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属性为templi标签的文本之后,我使用了正则表达式来分离最高气温值与最低气温值,并保存到对应的列表中。以波浪线作为切入点,波浪线前的数字即为最低气温,波浪线后的数字即为最高气温。获取正则匹配的文本之后,对字符串进行切片,然后使用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天气温走势图相关推荐

  1. 【Python网络爬虫与数据可视化实战案例】近15年的中国国内生产总值

    需求描述   打开东方财富网的中国国内数据总值数据页,进入如下页面.   现在需要把页面上的国内生产总值数据表爬取下来,写入CSV文件以持久化存储.在这之后,将CSV文件内的数据做成折线图,实现数据可 ...

  2. python pandas_Python库Pandas数据可视化实战案例

    点击上方"爱好Python的胡同学",选择"星标"公众号 每晚八点,Python干货,不见不散! 数据可视化可以让我们很直观的发现数据中隐藏的规律,察觉到变量之 ...

  3. Python网络爬虫及数据可视化(软科中国大学专业排名|计算机科学与技术)

    设计内容: 对中国大学专业排名网站中2021年,计算机科学与技术专业,进行数据爬取和数据可视化. URL地址:https://www.shanghairanking.cn/rankings/bcmr/ ...

  4. Python实验1——网络爬虫及数据可视化

    Python实验1--网络爬虫及数据可视化 一.实验目标与基本要求 实验目标 基本要求 二.主要知识点.重点与难点 主要知识点 重点 难点 三.实验过程设计 获取网页 获取数据 保存到数据库 数据预处 ...

  5. Python 网络爬虫笔记11 -- Scrapy 实战

    Python 网络爬虫笔记11 – Scrapy 实战 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Py ...

  6. Python库Pandas数据可视化实战案例

    >关注公众号:大数据技术派,回复`资料`,领取`1024G`资料. 数据可视化可以让我们很直观的发现数据中隐藏的规律,察觉到变量之间的互动关系,可以帮助我们更好的给他人解释现象,做到一图胜千文的 ...

  7. Python网络爬虫基础进阶到实战教程

    文章目录 认识网络爬虫 HTML页面组成 Requests模块get请求与实战 效果图 代码解析 Post请求与实战 代码解析 发送JSON格式的POST请求 使用代理服务器发送POST请求 发送带文 ...

  8. Python网络爬虫之数据解析(二)

    学习笔记,续上篇 八.正则表达式解析HTML网页 8.1 正则表达式介绍 什么是正则表达式: 通俗理解:按照一定的规则,从某个字符串中匹配出想要的数据,这个规则就是正则表达式. 标准答案:https: ...

  9. 数据分析从零到精通第三课 python自动化和BI数据可视化实战

    05 效率提升:如何通过邮件报表释放人力 本课时主要分享从零搭建数据邮件日报系统的方法,从而满足业务方的定期数据需求.希望通过本课时的介绍,你可以立刻在自己机器上实践定时邮件发送的任务. 邮件日报的业 ...

最新文章

  1. 「CF622F」The Sum of the k-th Powers「拉格朗日插值」
  2. Android 11 修改libcore update-api 遇到的问题
  3. goole机器学习视频链接【学习笔记】
  4. 去银行存款,银行打印错日期,到期之后才发现,利息该怎么算?
  5. Spring Boot Oauth2安全性
  6. 一些adb的常用命令
  7. php更改tittle,phpcms V9修改默认title标签
  8. 程序员常用字体(vs2008配色方案)
  9. linux qt遍历设备,Qt获取设备环境变量
  10. 禁用联想笔记本电脑自带的键盘
  11. LS-DYNA基础理论
  12. 汽车中控语音导航服务器繁忙,交警大队智能语音导航系统解决方案
  13. Gym 100015A
  14. 综合函数矩量法原理及实现思路
  15. 基于MATLAB APP Designer 和 Python 的音视频剪辑App_02
  16. 短链接的生成之工具类的编写--三种方式(亲测可用)
  17. 根据Email地址跳转到邮箱登录界面
  18. 广告投放相关专业名词整理
  19. ActiveX控件打包cab时INF文件的编写
  20. win10开机黑屏一会1-2秒后进入桌面的原因总结和解决方式。

热门文章

  1. Rack-based applications
  2. java resultset getmetadata_Java ResultSetMetaData getColumnType()方法与示例
  3. TransactionScope事务处理
  4. php php_sockets,PHP-SOCKETS读书笔记_php
  5. PHP的curl扩展的安装
  6. 胡才勇:开源软件受到商业软件专利侵权压力
  7. 如何应对网络恶意的攻击行为?
  8. 支付宝无手续费批量返款技巧
  9. seo外链是什么,seo外链怎么发?
  10. 形状工具应用——制作巧克力