这篇文章主要介绍了python爬虫爬取天气数据讲解,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。
前言
今天我们分享一个小案例,获取天气数据,进行可视化分析,带你直观了解天气情况!
一、核心功能设计
总体来说,我们需要先对中国天气网中的天气数据进行爬取,保存为csv文件,并将这些数据进行可视化分析展示。
拆解需求,大致可以整理出我们需要分为以下几步完成:
- 通过爬虫获取中国天气网7.20-7.21的降雨数据,包括城市,风力方向,风级,降水量,相对湿度,空气质量学python什么书比较好。
- 对获取的天气数据进行预处理,分析河南的风力等级和风向,绘制风向风级雷达图。
- 根据获取的温度和湿度绘制温湿度相关性分析图,进行温度、湿度对比分析。
- 根据获取的各城市的降雨量,可视化近24小时的每小时时段降水情况。
- 绘制各城市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('').string
text = text[text.index('=')+1 :-2] # 移除改var data=将其变为json数据
jd = json.loads(text)
dayone = jd['od']['od2'] # 找到当天的数据
final_day = [] #