当前位置:   article > 正文

python爬取一年天气数据_历史天气导出

历史天气导出

因为有些分数问我怎么直接爬取一年的天气,并做数据分析,今天我就来了

1.爬取2021年一年的数据

首先,我们需要找到一个能够提供天气数据的网站。这里我们选择了中国天气网(【惠州历史天气】惠州历史天气预报_惠州历史天气预报记录查询-历史天气查询网 (tianqi.com)

导出相应的包

  1. import numpy as np
  2. import pandas as pd
  3. import requests
  4. from bs4 import BeautifulSoup
  5. from matplotlib import pyplot as plt
  6. from pandas import Series, DataFrame

2.进行伪装

  1. headers = {
  2. 'Host': 'lishi.tianqi.com',
  3. 'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Mobile Safari/537.36 Edg/112.0.1722.58'
  4. }

3.抓取一年天气数据

  1. url_base = 'https://lishi.tianqi.com/huizhou/2021{}.html' # 惠州 2021年天气
  2. data_all = []
  3. for month in range(1, 13):
  4. url = url_base.format(str(month).zfill(2))
  5. res = requests.get(url, headers=headers)
  6. res.encoding = 'utf-8'
  7. html = BeautifulSoup(res.text, 'html.parser')
  8. tian_three = html.find("div", {"class": "tian_three"})
  9. lishi = tian_three.find_all("li")
  10. for i in lishi:
  11. lishi_div = i.find_all("div")
  12. data = []
  13. for j in lishi_div:
  14. data.append(j.text)
  15. data_all.append(data)

4.数据存储

在数据存储前,对数据进行处理,便于后期的数据分析。将上面的“当天信息”字段拆分为“日期”和“星期”两个字段,“风向信息”也是如此。最后,将数据保存为csv文件中。

  1. weather = pd.DataFrame(data_all)
  2. weather.columns = ["当日信息", "最高气温", "最低气温", "天气", "风向信息"]
  3. weather_shape = weather.shape
  4. weather['当日信息'].apply(str)
  5. result = DataFrame(weather['当日信息'].apply(lambda x: Series(str(x).split(' '))))
  6. result = result.loc[:, 0:1]
  7. result.columns = ['日期', '星期']
  8. weather['风向信息'].apply(str)
  9. result1 = DataFrame(weather['风向信息'].apply(lambda x: Series(str(x).split(' '))))
  10. result1 = result1.loc[:, 0:1]
  11. result1.columns = ['风向', '级数']
  12. weather = weather.drop(columns='当日信息')
  13. weather = weather.drop(columns='风向信息')
  14. weather.insert(loc=0, column='日期', value=result['日期'])
  15. weather.insert(loc=1, column='星期', value=result['星期'])
  16. weather.insert(loc=5, column='风向', value=result1['风向'])
  17. weather.insert(loc=6, column='级数', value=result1['级数'])
  18. weather.to_csv("惠州2021年天气.csv", encoding="utf_8")

5.数据分析

注:数据分析用的是惠州2021年的天气数据,如下图

 

 读取惠州2021年天气情况并转化为图形

  1. # 数据处理
  2. plt.rcParams['font.sans-serif'] = ['SimHei']
  3. plt.rcParams['axes.unicode_minus'] = False
  4. weather['最高气温'] = weather['最高气温'].map(lambda x: int(x.replace('℃', '')))
  5. weather['最低气温'] = weather['最低气温'].map(lambda x: int(x.replace('℃', '')))
  6. dates = weather['日期']
  7. highs = weather['最高气温']
  8. lows = weather['最低气温']
  9. # 画图
  10. fig = plt.figure(dpi=128, figsize=(10, 6))
  11. plt.plot(dates, highs, c='red', alpha=0.5)
  12. plt.plot(dates, lows, c='blue', alpha=0.5)
  13. plt.fill_between(dates, highs, lows, facecolor='blue', alpha=0.2)
  14. # 图表格式
  15. # 设置图标的图形格式
  16. plt.title('2023惠州2021年天气情况', fontsize=24)
  17. plt.xlabel('', fontsize=6)
  18. fig.autofmt_xdate()
  19. plt.ylabel('气温', fontsize=12)
  20. plt.tick_params(axis='both', which='major', labelsize=10)
  21. # 修改刻度
  22. plt.xticks(dates[::5])
  23. # 显示
  24. plt.show()

因为数据量下面代表日期比较多,所以比较乱一点

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/753296
推荐阅读
相关标签
  

闽ICP备14008679号