Python爬取天气

近年来,随着互联网的普及和数据开放,我们可以通过网络获取到各种各样的数据。其中,天气数据是人们关注的重点之一。通过获取天气数据,我们可以及时了解到未来几天的天气情况,以便合理安排个人和工作生活。

本文将介绍如何使用Python爬取天气数据,并通过代码示例演示具体的实现过程。

爬取天气数据

首先,我们需要确定获取天气数据的来源。目前,市面上有很多天气预报网站,我们可以选择其中一个来获取数据。以中国天气网(www.weather.com.cn)为例,该网站提供了全国各地的天气预报信息。

接下来,我们需要分析网页的结构,找到包含天气数据的元素。通过查看网页源代码,我们可以发现天气数据被包含在weatherbox这个class的div元素中,而每个具体天气数据则被包含在sk_info这个class的div元素中。

import requests
from bs4 import BeautifulSoup

def get_weather(city_code):
    url = f"
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"}
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, "html.parser")
    weather_box = soup.find("div", {"class": "weatherbox"})
    weather_info = weather_box.find_all("div", {"class": "sk_info"})
    for info in weather_info:
        print(info.get_text())

上述代码中,我们通过requests库发送HTTP请求,获取指定城市的天气预报网页。接着,我们使用BeautifulSoup库解析网页源代码,从中提取出天气数据。最后,我们使用findfind_all方法,通过指定class属性值,找到对应的div元素。

可视化天气数据

获取到天气数据后,我们可以将其可视化,以便更直观地了解和比较各个城市的天气情况。在本文中,我们将使用matplotlib库绘制饼状图,展示不同天气类型的比例。

首先,我们需要统计各个天气类型出现的次数。我们可以定义一个字典,将天气类型作为键,出现次数作为值。然后,遍历天气数据,统计各个天气类型的次数。

import matplotlib.pyplot as plt

def plot_weather(weather_data):
    weather_count = {}
    for data in weather_data:
        weather_type = data.split(" ")[0]  # 假设天气数据格式为“晴 25℃~15℃”
        if weather_type in weather_count:
            weather_count[weather_type] += 1
        else:
            weather_count[weather_type] = 1

    labels = list(weather_count.keys())
    sizes = list(weather_count.values())
    colors = ["yellowgreen", "gold", "lightskyblue", "lightcoral", "orange"]
    plt.pie(sizes, labels=labels, colors=colors, autopct="%1.1f%%", startangle=140)
    plt.axis("equal")
    plt.show()

上述代码中,我们定义了一个plot_weather函数,该函数接收天气数据作为参数。我们首先创建一个空字典weather_count,用于存储不同天气类型的出现次数。然后,我们遍历天气数据,将天气类型提取出来,并更新字典中相应的值。

接着,使用matplotlib.pyplot模块的pie函数绘制饼状图。我们将字典的键作为饼状图的标签,字典的值作为饼状图的大小,使用预定义的颜色设置饼状图的颜色,使用autopct参数显示百分比,使用startangle参数设置起始角度,使