Python番外篇:selenium+matplotlib 爬取天气预报 制作温度折线图

hello,大家好,我是wangzirui32,今天我们来学习如何使用selenium+matplotlib来爬取天气预报,并制作未来气温折线图。
先来看看成品:

Python番外篇:selenium+matplotlib 爬取天气预报 制作温度折线图
好了,看到了我们的成果,相信你会更有学习的动力的!
开始学习吧!

学习目录

; 1. 爬取天气数据并存储到json文件中

1.2 数据来源

这里使用的数据来源为中国天气网(www.weather.com.cn)所提供的天气预报。

1.3 分析天气预报网页

我就以泰州市为例子,未来7天(实际我们要爬取的是未来6天,是不包含今天的天气数据)的天气预报网页为http://www.weather.com.cn/weather/101191201.shtml,可以看出,101191201是城市编号,切换城市编号就可以获取不同城市的天气预报。
开始分析:

Python番外篇:selenium+matplotlib 爬取天气预报 制作温度折线图
可以看出,ul中的每一项li标签都是一天的天气数据,继续分析:
Python番外篇:selenium+matplotlib 爬取天气预报 制作温度折线图

; 1.4 编写爬取代码

from selenium.webdriver import Firefox
from datetime import datetime, timedelta
from json import dump

city_id = 101191201

url = "http://www.weather.com.cn/weather/" + str(city_id) + ".shtml"

driver = Firefox(executable_path="geckodriver.exe")

driver.get(url)

ul = driver.find_element_by_xpath("//ul[@class='t clearfix']")

li_list = ul.find_elements_by_tag_name("li")

del li_list[0]

temperature_data_list = []

day = 1

for li in li_list:

    p = li.find_element_by_css_selector("p.tem")

    date = (datetime.now() + timedelta(days=day)).strftime("%Y-%m-%d")

    low_temperature = int(p.find_element_by_tag_name("i").text[:-1])
    high_temperature = int(p.find_element_by_tag_name("span").text[:-1])

    dict_temperature = {"date": date,
                        "low": low_temperature,
                        "high": high_temperature}

    temperature_data_list.append(dict_temperature)

    day += 1

with open("temperature.json", "w") as t:

    dump(temperature_data_list, t)

运行代码,即可存储天气数据。

  1. 读取数据并使用matplotlib制作图表

现在,我们获取加载temperature.json中的数据,用matplotlib制作图表:

import matplotlib.pyplot as plt
from json import load
from datetime import datetime

city_name = "TaiZhou"

with open("temperature.json") as t:
    data = load(t)

    date, high, low = [], [], []

    for d in data:
        date.append(datetime.strptime(d["date"], '%Y-%m-%d'))
        high.append(int(d["high"]))
        low.append(int(d["low"]))

plt.plot(date, high, c='red', linewidth=2)
plt.plot(date, low, c='blue', linewidth=2)

plt.fill_between(date, high, low, facecolor='blue', alpha=0.1)

plt.title("A week's temperature in " + city_name, fontsize=24)
plt.xlabel("Date\nData Source:www.weather.com.cn", fontsize=15)
plt.ylabel("Hightemperature and Lowtemperature", fontsize=15)

plt.tick_params(axis='both', labelsize=10)

plt.savefig("A week's temperature in " + city_name + ".png", bbox_inches='tight')

plt.show()

写在最后

这个程序你还可以有一些”逆天”的操作,比如直接爬取未来40天的温度数据,当然这里作者就不演示了,大家可以自己试一下哦!

好了,这些就是今天的内容,感兴趣的可以点赞收藏,感谢你们!

Original: https://blog.csdn.net/wangzirui32/article/details/113871177
Author: wangzirui32
Title: Python番外篇:selenium+matplotlib 爬取天气预报 制作温度折线图

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/769445/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • sql 基础详细(持续更新)

    SQL基础 一、查询基础语句 查询语句的语法格式 Select * from 表名 where 条件; 具体演示 //创建一个学生成绩表 create table Student_…

    Python 2023年6月3日
    092
  • Python字典及基本操作(超级详细)

    今天小张帮大家简单介绍下Python的一种数据结构: 字典,字典是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据。 [TencentCloudSDKExce…

    Python 2023年6月3日
    065
  • django实现点赞功能

    我这里只接收了需要点赞的文章id这个参数,至于如何判断该请求是点赞还是取消赞, 则是从对应文章的users_like中查询,如果已有记录,说明点过赞,那就进行取消赞操作,如果没有记…

    Python 2023年10月30日
    053
  • python之OCR文字识别

    将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR)。可以实现OCR 的底层库并不多,目前很多库都是使用共同的几个底层OCR…

    Python 2023年8月1日
    078
  • 滤波算法——均值滤波,中值滤波,一阶(αβ)滤波,卡尔曼滤波

    滤波算法——均值滤波,中值滤波,一阶(αβ)滤波,卡尔曼滤波 因工作涉及到数据滤波(滤噪)处理,汇总了一些网上简单的滤波算法,方便日后查看。 滤波算法包括:均值滤波,中值滤波,一阶…

    Python 2023年8月2日
    079
  • Python安装第三方库常用方法 超详细~

    Python安装第三方库常用方法 前言 安装方法 * 1. 通过pychram安装 2. pip安装大法 3. 下载whl文件到本地离线安装 – 3.1 补充 4.其他…

    Python 2023年7月31日
    066
  • 计算机视觉(四):相机标定与增强现实

    计算机视觉(四):相机标定与增强现实 一、针孔照相机模型 * 1、照相机矩阵 2、分解照相机矩阵 3、计算照相机中心 4、camera类代码 二、照相机标定 * – 1…

    Python 2023年9月24日
    060
  • Arduino UNO驱动 AT24C256 EEPROM存储器模块

    Arduino UNO驱动 AT24C256 EEPROM存储器模块 * – AT24C256模块简介 – 模块引脚定义 – Arduino U…

    Python 2023年11月7日
    042
  • Python图形用户界面和游戏开发

    对于使用过计算机的人,应该对图形用户界面(GUI)应该都不会太陌生,这里就不在赘述。那么对于python这样的动态语言有没有GUI相关的库呢?答案是肯定有的,那么常见的有哪些呢?主…

    Python 2023年9月18日
    057
  • 利用Python快速实现一个线程池,非常简单

    雷猴啊,兄弟们!今天来展示一下如何用Python快速实现一个线程池。 ; 一、序言 当有多个 IO 密集型的任务要被处理时,我们自然而然会想到多线程。但如果任务非常多,我们不可能每…

    Python 2023年11月1日
    064
  • 如何通过.exe文件控制一台电脑

    CVE-2022-21999漏洞 如何实现发送一个.exe文件偷偷控制他人的电脑?这个想法很刑的,所以我只是说明我的实现方式,具体操作建议仅用于hvv等专业领域,请勿以身试法。 首…

    Python 2023年9月26日
    043
  • 404

    444444444 000000000 444444444 4::::::::4 00:::::::::00 4::::::::4 4:::::::::4 00::::::::::…

    Python 2023年6月11日
    045
  • one-hot编码

    one-hot编码 什么是one-hot编码 one-hot编码,又称独热编码、一位有效编码。其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任…

    Python 2023年10月7日
    071
  • Anaconda 使用清华源链接失败报错:‘SSL routines‘

    Solving environment: failedCondaHTTPError: HTTP 000 CONNECTION FAILED for urlAn HTTP error…

    Python 2023年9月8日
    044
  • python pygame sdl2教程_无法通过pip安装pygame_sdl2

    我正在尝试在我的ubuntu平台上安装pygame-sdl2。在 当我在teerminal上运行命令:pip install -i https://test.pypi.org/si…

    Python 2023年9月21日
    049
  • matplotlib之pyplot模块——保存当前图形(savefig())

    当前有效 matplotlib版本为: 3.4.1。 savefig()函数的作用是保存当前图形,它是 matplotlib输出的主要方式,可将图形保存为 png、 jpg等格式的…

    Python 2023年9月1日
    057
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球