不知道天气咋样?一起用Python爬取天气数据分析告诉你

前言

今天我们分享一个小案例,获取天气数据,进行可视化分析,带你直观了解天气情况!

一、核心功能设计

总体来说,我们需要先对中国天气网中的天气数据进行爬取,保存为csv文件,并将这些数据进行可视化分析展示。

拆解需求,大致可以整理出我们需要分为以下几步完成:

  1. 通过爬虫获取中国天气网7.20-7.21的降雨数据,包括城市,风力方向,风级,降水量,相对湿度,空气质量
  2. 对获取的天气数据进行预处理,分析河南的风力等级和风向,绘制风向风级雷达图
  3. 根据获取的温度和湿度绘制温湿度相关性分析图,进行温度、湿度对比分析。
  4. 根据获取的各城市的降雨量,可视化近24小时的每小时时段降水情况
  5. 绘制各城市24小时的累计降雨量

二、实现步骤

1. 爬取数据

首先我们需要获取各个城市的降雨数据,通过对中国天气网网址分析发现,城市的天气网址为:http://www.weather.com.cn/weather/101180101.shtml。

在这里插入图片描述

根据对数据分析,返回的json格式数据,不难发现:

  • 101180101就是代表城市编号
  • 7天的天气预报数据信息在div标签中并且id=“7d”
  • 日期、天气、温度、风级等信息都在ul和li标签

网页结构我们上面已经分析好了,那么我们就可以来动手爬取所需要的数据了。获取到所有的数据资源之后,可以把这些数据保存下来。

请求网站:

天气网的网址:http://www.weather.com.cn/weather/101180101.shtml。如果想爬取不同的地区只需修改最后的101180101地区编号,前面的weather代表是7天的网页。

def getHTMLtext(url):
	"""请求获得网页内容"""
	try:
		r = requests.get(url, timeout = 30)
		r.raise_for_status()
		r.encoding = r.apparent_encoding
		print("Success")
		return r.text
	except:
		print("Fail")
		return" "

在这里插入图片描述

处理数据:

采用BeautifulSoup库对刚刚获取的字符串进行数据提取。获取我们需要的风力方向,风级,降水量,相对湿度,空气质量等。

def get_content(html,cityname):
	"""处理得到有用信息保存数据文件"""
	final = []  							 # 初始化一个列表保存数据
	bs = BeautifulSoup(html, "html.parser")  # 创建BeautifulSoup对象
	body = bs.body
	data = body.find('div', {
   'id': '7d'})    # 找到div标签且id = 7d
	# 下面爬取当天的数据
	data2 = body.find_all('div',{
   'class':'left-div'})
	text = data2[2].find('script').string
	text = text[text.index('=')+1 :-2]		 # 移除改var data=将其变为json数据
	jd = json.loads(text)
	dayone = jd['od']['od2']				 # 找到当天的数据
	final_day = []						     # 存放当天的数据
	count = 0
	for i in dayone:
		temp = []
		if count <=23:
			temp.append(i['od21'])				 # 添加时间
			temp.append(cityname+'市')			# 添加城市
			temp.append(i['od22'])				 # 添加当前时刻温度
			temp.append(i['od24'])				 # 添加当前时刻风力方向
			temp.append(i['od25'])				 # 添加当前时刻风级
			temp.append(i['od26'])				 # 添加当前时刻降水量
			temp.append(i['od27'])				 # 添加当前时刻相对湿度
			temp.append(i['od28'])				 # 添加当前时刻控制质量
# 			print(temp)
			final_day.append(temp)
			data_all.append(temp)
		count = count +1
	# 下面爬取24h的数据
	ul = data.find('ul')                     # 找到所有的ul标签
	li = ul.find_all('li')                   # 找到左右的li标签
	i = 0                                    # 控制爬取的天数
	for day in li:                          # 遍历找到的每一个li
	    if i < 7 and i > 0:
	        temp = []                        # 临时存放每天的数据
	        date = day.find('h1').string     # 得到日期
	        date = date[0:date.index('日')]  # 取出日期号
	        temp.append(date)
	        inf = day.find_all('p')          # 找出li下面的p标签,提取第一个p标签的值,即天气
	        temp.append(inf[0].string)

	        tem_low = inf[1].find('i'
评论 138
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dragon少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值