请选择 进入手机版 | 继续访问电脑版

扫码登录更安全

QQ登录

只需要一步,快速开始

手机号码,快捷登录

查看: 35|回复: 0

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

[复制链接]

等级头衔

积分成就    金币 : 2082
   贡献 : 11
   泡泡 : 1084
   精华 : 6
   在线时间 : 424 小时
   最后登录 : 2019-5-25

丰功伟绩

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

联系方式
发表于 2019-5-7 22:08:42 | 显示全部楼层 |阅读模式
利用央视天气网站的天气数据,爬取30天天气数据并绘制成折线图
11.jpg
  1. import reimport requests
  2. from matplotlib import pyplot as plt
  3. headers = {
  4.     'Host': 'www.yangshitianqi.com',
  5.     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
  6. }
  7. # 获取济南近30天的最低温和最高温
  8. html = requests.get('https://www.yangshitianqi.com/jinan/30tian.html',
  9.                     headers=headers).text
  10. # 使用正则提取数据
  11. pattern_temperature = r'<div class="fl i3 nz">(\d+~\d+)℃</div>'
  12. pattern_date = r'<div class="t2 nz">(\d\d\.\d\d)</div>'
  13. temperature = re.findall(pattern_temperature, html)
  14. date = re.findall(pattern_date, html)
  15. # 整理数据
  16. max_d = [int(i.split('~')[1]) for i in temperature]
  17. min_d = [int(i.split('~')[0]) for i in temperature]
  18. # 近30日最低温和最高温
  19. max_m = max(max_d)
  20. min_m = min(min_d)
  21. # 近30日最低温最高温所处的日期(第几天)
  22. max_m_d = max_d.index(max_m)
  23. min_m_d = min_d.index(min_m)
  24. # 日期
  25. date = [i.split('.')[0] + '月' + i.split('.')[1] + '日' for i in date]
  26. # 定义图像质量
  27. plt.figure(figsize=(18.5, 9), dpi=180)
  28. # 解决中文乱码
  29. plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
  30. plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
  31. # 绘制图像
  32. plt.plot(range(30), max_d, linestyle=':')
  33. plt.plot(range(30), min_d, linestyle=':')
  34. # 显示日期
  35. plt.xticks(range(30), date, rotation=315)
  36. # xy轴标识
  37. plt.xlabel('日期', size=18)
  38. plt.ylabel('温度/℃', size=18)
  39. plt.title('近30日天气情况', size=36)
  40. # 标记最高温和最低温
  41. plt.text(
  42.     # x轴坐标
  43.     max_m_d,
  44.     # y轴坐标
  45.     max_m + 1,
  46.     # 文字
  47.     f'最高温,{max_m}℃',
  48.     # 字体大小
  49.     fontsize=16,
  50.     # 文字颜色
  51.     color='red',
  52.     # 相对位置-水平
  53.     ha='center',
  54.     # 相对位置-垂直
  55.     va='center',
  56.     # 透明度
  57.     alpha=1
  58. )
  59. plt.text(
  60.     # x轴坐标
  61.     min_m_d,
  62.     # y轴坐标
  63.     min_m - 1,
  64.     # 文字
  65.     f'最低温,{min_m}℃',
  66.     # 字体大小
  67.     fontsize=16,
  68.     # 文字颜色
  69.     color='blue',
  70.     # 相对位置-水平
  71.     ha='center',
  72.     # 相对位置-垂直
  73.     va='center',
  74.     # 透明度
  75.     alpha=1
  76. )
  77. # 显示网格
  78. plt.grid(axis='y', alpha=0.2)
  79. plt.savefig('a.png')
  80. plt.show()
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|小黑屋|paopaomj.COM ( 渝ICP备18007172号 )

GMT+8, 2019-5-26 13:26

Powered by paopaomj X3.4 © 2016-2019

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