当前位置: 首页 > article >正文

【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爬取中国天气网上的天气数据。希望这篇文章对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言。


http://www.kler.cn/a/509274.html

相关文章:

  • 生成树机制实验
  • HBase实训:纸币冠字号查询任务
  • LLM - 大模型 ScallingLaws 的 CLM 和 MLM 中不同系数(PLM) 教程(2)
  • 【PyQt】图像处理系统
  • 第4章 Kafka核心API——Kafka客户端操作
  • 深入了解卷积神经网络(CNN):图像处理与深度学习的革命性技术
  • Arm 驱动i2c相关
  • 自己搭建远程桌面服务器-RustDesk(小白版)
  • Vue项目搭建教程超详细
  • PyTest自学 - 将多个用例组织在一个类中
  • WebSocket有哪些缺点?应该如何解决?
  • IoTDB 常见问题 QA 第四期
  • Inception 网络:开启多尺度卷积的图像识别新时代
  • LLMs(大型语言模型)的多智能体:Auto-GPT
  • 如何在服务器同一个端口下根据路径区分不同的应用
  • 使用docker部署tomcat服务器和mysql数据库
  • WildFly与tomcat的异同
  • MySQL触发器:概念、作用
  • 图解Git——远程分支《Pro Git》
  • PHP 8.4 安装和升级指南
  • 海康威视摄像头RTSP使用nginx推流到服务器直播教程
  • Unity HybridCLR Settings热更设置
  • 【BUUCTF】[NCTF2019]SQLi
  • 【PCL】sample_consensus 模块—— Random Sample Consensus model(随机样本一致性模型,RANSAC)
  • C 语言的void*到底是什么?
  • VScode运行NPM脚本时出现“终端将被任务重用,按任意键关闭”?亲测有效解决方法