QQ登录

只需要一步,快速开始

APP扫码登录

只需要一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

查看: 2591|回复: 0

[Python] 爬取最近30日天气并绘制折线图

[复制链接]

等级头衔

积分成就    金币 : 2857
   泡泡 : 1516
   精华 : 6
   在线时间 : 1313 小时
   最后登录 : 2025-1-18

丰功伟绩

优秀达人突出贡献荣誉管理论坛元老活跃会员

联系方式
发表于 2019-5-7 22:08:42 | 显示全部楼层 |阅读模式
利用央视天气网站的天气数据,爬取30天天气数据并绘制成折线图+ l& l+ F" ]( }: G- |7 N
11.jpg
/ U6 S/ @6 L3 _& }
import reimport requests
from matplotlib import pyplot as plt
 
 
 
headers = {
    'Host': 'www.yangshitianqi.com',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
}
# 获取济南近30天的最低温和最高温
html = requests.get('https://www.yangshitianqi.com/jinan/30tian.html',
                    headers=headers).text
# 使用正则提取数据
pattern_temperature = r'<div class="fl i3 nz">(\d+~\d+)℃</div>'
pattern_date = r'<div class="t2 nz">(\d\d\.\d\d)</div>'
temperature = re.findall(pattern_temperature, html)
date = re.findall(pattern_date, html)
 
# 整理数据
max_d = [int(i.split('~')[1]) for i in temperature]
min_d = [int(i.split('~')[0]) for i in temperature]
# 近30日最低温和最高温
max_m = max(max_d)
min_m = min(min_d)
# 近30日最低温最高温所处的日期(第几天)
max_m_d = max_d.index(max_m)
min_m_d = min_d.index(min_m)
# 日期
date = [i.split('.')[0] + '月' + i.split('.')[1] + '日' for i in date]
 
# 定义图像质量
plt.figure(figsize=(18.5, 9), dpi=180)
 
# 解决中文乱码
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
 
# 绘制图像
plt.plot(range(30), max_d, linestyle=':')
plt.plot(range(30), min_d, linestyle=':')
 
# 显示日期
plt.xticks(range(30), date, rotation=315)
 
# xy轴标识
plt.xlabel('日期', size=18)
plt.ylabel('温度/℃', size=18)
plt.title('近30日天气情况', size=36)
 
# 标记最高温和最低温
plt.text(
    # x轴坐标
    max_m_d,
    # y轴坐标
    max_m + 1,
    # 文字
    f'最高温,{max_m}℃',
    # 字体大小
    fontsize=16,
    # 文字颜色
    color='red',
    # 相对位置-水平
    ha='center',
    # 相对位置-垂直
    va='center',
    # 透明度
    alpha=1
)
plt.text(
    # x轴坐标
    min_m_d,
    # y轴坐标
    min_m - 1,
    # 文字
    f'最低温,{min_m}℃',
    # 字体大小
    fontsize=16,
    # 文字颜色
    color='blue',
    # 相对位置-水平
    ha='center',
    # 相对位置-垂直
    va='center',
    # 透明度
    alpha=1
)
 
# 显示网格
plt.grid(axis='y', alpha=0.2)
plt.savefig('a.png')
plt.show()
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|paopaomj.COM ( 渝ICP备18007172号|渝公网安备50010502503914号 )

GMT+8, 2025-1-18 17:09

Powered by paopaomj X3.5 © 2016-2025 sitemap

快速回复 返回顶部 返回列表