赞
踩
环境:Pycharm(第三方库包含:pandas库,matplotlib库,requests库,BeautifulSoup4库)
数据来源:http://www.tianqihoubao.com/lishi/xiaoyi/month/202312.html(山西省吕梁市孝义市2023年12月整月的天气数据)
- import requests
- from bs4 import BeautifulSoup
- import pandas as pd
-
- headers = {
- "user-agent": "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
- }
- url = "http://www.tianqihoubao.com/lishi/xiaoyi/month/202312.html"
其中"url"可替换为相应的爬取数据网站噢~
- res = requests.get(url,headers=headers)
- html = res.content.decode('gbk')
- #print(html.text)
- soup = BeautifulSoup(html,'lxml')
- list = soup.find_all('tr')
- #print(list)
-
- dates,conditions,temp = [],[],[]
- for i in list[1:]: #从第二列开始是天气数据
- data = i.text.split() #对文字内容进行分段
- #print(data)
爬取结果展示:
- #data[0] = ['2023年12月01日', '晴', '/晴', '-5℃', '/', '9℃', '西南风', '1-3级', '/西南风', '1-3级']
- dates.append(data[0])
- conditions.append(data[1:3])
- temp.append(data[3:6])
- print(dates,conditions,temp)
成果展示:
- data_mouth = pd.DataFrame() #通过pandas创建一个数据集,存放天气信息
- data_mouth['日期'] = dates
- data_mouth['天气情况'] = conditions
- data_mouth['气温'] = temp
- #print(data_mouth)
-
- data_mouth.to_csv("孝义市天气.csv",index=False,encoding='utf-8') #导入到csv文件,不保留行索引
处理成果展示(即为data_mouth中存储的信息):
- import pandas as pd
- from matplotlib import pyplot as plt
- plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文问题
- plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
data = pd.read_csv("孝义市天气.csv")
- data['最高气温'] = data['气温'].str.split("'", expand=True)[1] # extend=True 以'号为分隔符,将数据分为n个纵列,并标记id
- data['最低气温'] = data['气温'].str.split("'", expand=True)[5]
-
-
- data['最高气温'] = data['最高气温'].map(lambda x:int(x.replace('℃','')))
- data['最低气温'] = data['最低气温'].map(lambda x:int(x.replace('℃','')))
- #将气温“x℃”转换为数字类型,然后使用pandas里的map函数替换原来的值,方便做Y轴参数
- #replace函数,replace(to_replace, value),将前面的值转化为后面的值
-
- dates = data['日期']
- highs = data['最高气温']
- lows = data['最低气温']
-
- # 画图 配置参数
- fig = plt.figure(dpi=128, figsize=(10, 6)) # 设定画布分辨率,宽和高
- plt.plot(dates, highs, c='yellow', alpha=0.5) # alpha 透明度,越接近1越不透明
- plt.plot(dates, lows, c='red', alpha=0.5)
- plt.fill_between(dates, highs, lows, facecolor='green', alpha=0.2)
- # 填充highs和lows之间的空隙
-
- # 外围标签
- plt.title('2023年12月孝义市天气情况', fontsize=24) # 标题
- plt.xlabel("", fontsize=6) # 绘制X轴
- fig.autofmt_xdate() # 绘制斜的目标标签,避免重叠
- plt.ylabel("气温", fontsize=12)
- plt.tick_params(axis='both', which='major', labelsize=10) # 设置坐标轴属性
-
- plt.show()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。