python爬虫案例---python爬取天气数据并进行可视化处理

本文介绍了如何使用PyCharm中的相关库如pandas、requests和BeautifulSoup4爬取山西省吕梁市孝义市2023年12月的天气数据,并将数据清洗后存储为CSV文件,最后通过matplotlib进行数据可视化。
摘要由CSDN通过智能技术生成

环境:Pycharm(第三方库包含:pandas库,matplotlib库,requests库,BeautifulSoup4库)

数据来源http://www.tianqihoubao.com/lishi/xiaoyi/month/202312.html(山西省吕梁市孝义市2023年12月整月的天气数据)

一、爬取天气数据

1.头文件

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"可替换为相应的爬取数据网站噢~

2.爬取数据

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)

爬取结果展示:

3.将年月日存入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)

成果展示:

4.格式化处理并保存为csv文件

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中存储的信息):

二、将爬取的数据进行可视化处理

1.头文件及相关配置

import pandas as pd
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文问题
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

2.导入csv文件

data = pd.read_csv("孝义市天气.csv")

3.绘图配置

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()

4.成果展示

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值