首页 > 编程语言 >【Python项目实战】爬取中国天气网天气数据

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

时间:2025-01-20 22:58:08浏览次数:3  
标签:temp Python 天气 find 爬取 print else day

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

标签:temp,Python,天气,find,爬取,print,else,day
From: https://blog.csdn.net/weixin_74773078/article/details/145170795

相关文章

  • python 数据清洗
    数据清洗,清洗“RHU”列为999999的数据#!/usr/bin/python3#-*-coding:utf-8-*-"""@Time:2025/1/2022:50@Author:Suyue@Email:1493117872@qq.com@File:cloud_area.py@Project:untitled4"""importpandasaspdimportnumpyasnp......
  • python 探空数据根据“纬度”“经度”“纬度偏移量”“经度偏移量”列,纬度、经度、偏
    在Python中,如果您有包含“纬度”、“经度”、“纬度偏移量”和“经度偏移量”的DataFrame,并且这些值都是浮点数,可以使用这些值来计算新的、具体的经纬度。通常,这些偏移量是基于某种单位(如米、公里等)在地球表面上的距离转换而来的。由于地球是一个近似椭球体,计算精确的偏移后的经纬......
  • Python毕业设计 django培训机构教辅课后作业系统
    文章目录具体实现截图项目技术介绍设计思路核心代码部分展示运行指导论文写作思路django项目示例源码/演示视频获取方式具体实现截图起点树艺术培训机构系统是为满足当代艺术教育需求而设计的综合性管理平台,该系统主要功能包括学员管理、教师管理、培训课程管理、学......
  • 《如何用代码提升财务分析能力》第1章 Python基础知识
    第1章Python基础知识1.1初识Python1.1.1Python简介Python发展历史Python由GuidovanRossum于1989年圣诞节期间开始开发,1991年发布第一个版本。它的名字来源于Guido喜欢的英国喜剧团体MontyPython。Python的发展经历了几个重要阶段:Python1.0(1994年):引入lambda、......
  • 写了一个在线执行python的小工具,实现手机编写python代码后运行。
    为了初学者验证一些简单的python代码,写了一个小程序,能在线运行一些基础的python代码,还给了一些例子,后续会新增更多用例。简单首页后续更新其他基础知识在线编程页面里主要是一个输入框,和一些代码例子,点击即可自动导入,点击运行代码后,后端会执行相应运行。运行结果......
  • Python~Python面向对象之魔术方法
    一、魔术方法之构造方法1.介绍__init__()方法,称为构造方法在创建类对象(构造类)的时候,会自动执行在创建类对象(构造类)的时候,将传入参数自动传递给__init__方法使用2.示例classPerson:def__init__(self,name,age):self.name=nameself.age......
  • #Python 用Sqlite3做模拟银行系统
    直接上干货:#引用各大库以及模块:fromsre_constantsimport_NamedIntConstantimporttkinterastkfromtkinterimportmessagebox,Toplevelimportsqlite3importdatetime#系统基本操作1-创建记忆储存:defcreate_account():  conn=sqlite3.connect('bank_......
  • 利用Python的matplotlib 库实现散点图
    importmatplotlib.pyplotasplt#定义数据x=[1,2,3,4,5,6,7,8,9,10]y=[2,4,5,7,6,8,9,11,12,10]#绘制散点图plt.scatter(x,y)#添加标题和标签plt.title('SimpleScatterPlot')plt.xlabel('X-axis')plt.ylabel('Y-axis'......
  • 【第一天】零基础入门刷题Python-算法篇-数据结构与算法的介绍(持续更新)
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、Python数据结构与算法的详细介绍1.基本概念2.Python中的数据结构1.列表(List)2.元组(Tuple)3.字典(Dictionary)4.集合(Set)5.字符串(String)3.Python中的常用算法1.排序算法2.搜索算法3.递......
  • 使用 Python 和 Tesseract 进行验证码自动识别
    验证码(CAPTCHA)广泛用于防止自动化程序(例如爬虫)滥用网站。它通过呈现扭曲的字符、图形或其他复杂模式,要求用户确认自己是人类而非机器人。虽然它的目的是为了避免自动化工具进行操作,但我们可以使用Python和TesseractOCR技术来自动化识别这些验证码。在这篇文章中,我们将讲解如......