欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > 【Python项目实战】爬取中国天气网天气数据

【Python项目实战】爬取中国天气网天气数据

2025/1/19 18:52:40 来源:https://blog.csdn.net/weixin_74773078/article/details/145170795  浏览:    关键词:【Python项目实战】爬取中国天气网天气数据

1. 引言

在日常生活中,我们经常需要获取实时的天气数据。中国天气网www.weather.com.cn提供了较为丰富的天气数据资源,同时爬取不设过多限制,对新手友好。

代码资源:https://download.csdn.net/download/weixin_74773078/90274520

(有个性化程序定制需求可私信作者)

2. 准备工作

在开始之前,我们需要安装以下Python库:

  • requests:用于发送HTTP请求。

  • beautifulsoup4:用于解析HTML内容。

可以通过以下命令安装这些库:

pip install requests beautifulsoup4

3. 爬虫代码实现

以下是完整的爬虫代码,用于爬取中国天气网上的天气数据。

import requests
from bs4 import BeautifulSoup# 设置请求头,模拟浏览器请求
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'
}# 目标城市天气页面的URL(以北京为例)
city_code = "101010100"  # 北京的城市代码
url = f"http://www.weather.com.cn/weather/{city_code}.shtml"# 发送HTTP GET请求
response = requests.get(url, headers=headers)# 检查请求是否成功
if response.status_code == 200:print("成功获取天气数据")# 使用BeautifulSoup解析HTML内容soup = BeautifulSoup(response.content, 'html.parser')# 查找天气数据所在的HTML元素weather_data = soup.find('ul', class_='t clearfix')if weather_data:# 提取每天的天气信息for day in weather_data.find_all('li'):# 提取日期date = day.find('h1').text.strip() if day.find('h1') else "未知日期"# 提取天气状况weather = day.find('p', class_='wea').text.strip() if day.find('p', class_='wea') else "未知天气"# 提取温度temp = day.find('p', class_='tem')if temp:high_temp = temp.find('span').text.strip() if temp.find('span') else "未知高温"low_temp = temp.find('i').text.strip() if temp.find('i') else "未知低温"else:high_temp = "未知高温"low_temp = "未知低温"# 提取风力wind = day.find('p', class_='win')wind_level = wind.find('i').text.strip() if wind and wind.find('i') else "未知风力"# 打印天气信息print(f"日期: {date}")print(f"天气: {weather}")print(f"温度: {low_temp} ~ {high_temp}")print(f"风力: {wind_level}")print("-" * 30)else:print("未找到天气数据")
else:print(f"请求失败,状态码: {response.status_code}")

4. 代码解析

4.1 设置请求头

为了模拟浏览器请求,我们设置了User-Agent请求头。这可以避免被网站的反爬虫机制拦截。

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'
}

 

4.2 发送HTTP请求

使用requests.get()方法发送HTTP GET请求,并传入目标URL和请求头。

response = requests.get(url, headers=headers)

 

4.3 解析HTML内容

使用BeautifulSoup解析返回的HTML内容,并查找包含天气数据的HTML元素。

soup = BeautifulSoup(response.content, 'html.parser')
weather_data = soup.find('ul', class_='t clearfix')

 

4.4 提取天气信息

通过遍历<li>标签,提取每天的天气信息,包括日期、天气状况、温度和风力。

for day in weather_data.find_all('li'):date = day.find('h1').text.strip() if day.find('h1') else "未知日期"weather = day.find('p', class_='wea').text.strip() if day.find('p', class_='wea') else "未知天气"temp = day.find('p', class_='tem')if temp:high_temp = temp.find('span').text.strip() if temp.find('span') else "未知高温"low_temp = temp.find('i').text.strip() if temp.find('i') else "未知低温"else:high_temp = "未知高温"low_temp = "未知低温"wind = day.find('p', class_='win')wind_level = wind.find('i').text.strip() if wind and wind.find('i') else "未知风力"

 

4.5 打印天气信息

将提取的天气信息打印出来。

print(f"日期: {date}")
print(f"天气: {weather}")
print(f"温度: {low_temp} ~ {high_temp}")
print(f"风力: {wind_level}")
print("-" * 30)

5. 运行结果

运行上述代码后,程序会输出目标城市(如北京)未来几天的天气信息,包括日期、天气状况、温度和风力等级。例如:

日期: 10日(今天)
天气: 晴
温度: 10℃ ~ 22℃
风力: 3-4级
------------------------------
日期: 11日(明天)
天气: 多云
温度: 12℃ ~ 24℃
风力: 微风
------------------------------
日期: 12日(后天)
天气: 阴
温度: 14℃ ~ 20℃
风力: 3-4级
------------------------------

6. 注意事项

  1. 反爬虫机制:中国天气网可能会有反爬虫机制,建议控制请求频率,避免频繁访问。

  2. 城市代码:如果需要爬取其他城市的天气数据,可以替换city_code为对应城市的代码。

  3. 合法性:确保你的爬虫行为符合相关法律法规和网站的使用条款。

7. 扩展

  • 动态获取城市代码:可以编写一个函数,根据城市名称动态获取对应的city_code

  • 保存数据:将爬取的数据保存到CSV文件或数据库中,方便后续分析。

  • 定时任务:使用schedule库或操作系统的定时任务功能,定期爬取天气数据。

8. 结语

通过本文的介绍,你可以轻松使用Python爬取中国天气网上的天气数据。希望这篇文章对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com