如何从天气网站提取雪深数据并构建Pandas DataFrame

胖磊小哥_6971

胖磊小哥_6971

2026-06-05

438人浏览

原创

如何从天气网站提取雪深数据并构建Pandas DataFrame

本文介绍如何使用beautifulsoup精准定位并提取挪威天气网站(yr.no)中指定区域(如jordalen - nåsen)的雪深值,并将其结构化为pandas dataframe,支持多行多列表格解析与类型安全转换。

本文介绍如何使用beautifulsoup精准定位并提取挪威天气网站(yr.no)中指定区域(如jordalen - nåsen)的雪深值,并将其结构化为pandas dataframe,支持多行多列表格解析与类型安全转换。

要从 yr.no 雪深页面 提取结构化雪深数据(而不仅是单个 文本),关键在于识别页面真实的HTML结构:它并非简单罗列独立span标签,而是以响应式表格(

语义化变体)组织——每行代表一个观测点(如Jordalen - Nåsen),每列对应不同时间维度(如24h、48h、累计雪深等)。

因此,直接使用 find_all("span", {"class": "snow-depth__value"}) 会返回全部雪深值但丢失归属关系(无法知道哪个值属于哪个地点)。更稳健的做法是按表格逻辑解析整张二维数据表:

✅ 正确解析策略

  1. 定位表头(
):筛选带 fluid-table__row--link 类的行(即有效观测点);
  • 逐行提取单元格文本:利用 row.children 遍历每个
  • ):提取列名(如“Sted”、“24 t”、“48 t”、“Totalt”);
  • 定位数据行(
  • 或 子元素;
  • 构造生成器避免内存膨胀:对大数据量表格更高效;
  • 用 Pandas DataFrame 统一建模:自动对齐行列,支持后续分析。
  • 以下是完整、可运行的生产级代码:

    数据仪表盘后台网站模板
    数据仪表盘后台网站模板

    数据仪表盘后台网站模板是一款数据模块布局清晰的仪表盘后台网站模板下载。提示:本模板调用到谷歌字体库,可能会出现页面打开比较缓慢。

    下载
    from bs4 import BeautifulSoup
    import requests
    import pandas as pd
    
    # 获取网页内容
    url = 'https://www.php.cn/link/37bc3d1076fca822d98e539754dae9cd'
    response = requests.get(url, timeout=10)
    response.raise_for_status()  # 确保请求成功
    
    soup = BeautifulSoup(response.content, 'html.parser')
    
    # 提取表头(列名)
    headers = [th.get_text(strip=True) for th in soup.find_all('th', class_='fluid-table__cell--heading')]
    
    # 提取所有数据行(每个观测点一行)
    rows = soup.find_all('tr', class_='fluid-table__row fluid-table__row--link')
    
    # 构建行数据生成器:每行是一个字符串列表
    def extract_row_texts(row):
        return [td.get_text(strip=True) for td in row.find_all(['td', 'th'])]
    
    data = [extract_row_texts(row) for row in rows]
    
    # 创建DataFrame(自动对齐列数,空缺处填充NaN)
    df = pd.DataFrame(data, columns=headers)
    
    # 可选:尝试将雪深列转为数值(处理“–”或空值)
    snow_cols = [col for col in df.columns if 't' in col.lower() or 'total' in col.lower()]
    for col in snow_cols:
        df[col] = pd.to_numeric(df[col].str.replace(r'[^\d\-]', '', regex=True), errors='coerce')
    
    print(df.head())
    # 示例输出(可能含Jordalen - Nåsen行):
    #             Sted  24 t  48 t  ...  Totalt
    # 0  Jordalen - Nåsen   25   30  ...      85

    ⚠️ 注意事项

    • 动态内容风险:该站点不依赖JavaScript渲染,但若未来改版CSS类名(如 fluid-table__row 变更),需同步更新选择器;
    • 语言与单位:页面为挪威语,列名如 “24 t” 表示“24小时”,数值单位统一为厘米(cm),无需额外换算;
    • 缺失值处理:原始文本中常用 – 或空格表示无数据,pd.to_numeric(..., errors='coerce') 会将其转为 NaN,便于后续 dropna() 或插补;
    • 反爬提示:添加 User-Agent 头可降低被限流概率(生产环境建议补充):
      headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'}
      requests.get(url, headers=headers)

    通过该方法,你不仅能精准获取 Jordalen - Nåsen 的雪深,还能一次性加载整个Vestland地区的结构化观测数据,为时间序列分析、地理可视化或自动化预警提供可靠数据源。

    相关文章

    PHP速学视频免费教程(入门到精通)
    PHP速学视频免费教程(入门到精通)

    PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    Python 时间序列分析与预测
    Python 时间序列分析与预测

    本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

    2025.12.04

    320

    15

    Python 数据清洗与预处理实战
    Python 数据清洗与预处理实战

    本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

    2026.01.31

    252

    21

    Python数据分析与Pandas高级实战
    Python数据分析与Pandas高级实战

    本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

    2026.04.13

    511

    25

    PixTV官网入口地址合集
    PixTV官网入口地址合集

    本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

    2026.10.10

    100

    15

    Kratos框架HTTP与gRPC服务开发教程
    Kratos框架HTTP与gRPC服务开发教程

    本专题围绕Kratos框架双协议服务开发,涵盖HTTP路由与处理器编写、参数获取、gRPC服务实现与客户端调用、metadata上下文传递、encoding编解码注册、统一响应封装、超时控制与流式响应实现方法。

    2026.10.10

    40

    15

    Kratos框架Protobuf接口定义与代码生成合集
    Kratos框架Protobuf接口定义与代码生成合集

    本专题讲解Kratos框架接口定义体系,涵盖proto编写规范、proto add/client/server生成命令、http注解路由、validate校验、OpenAPI文档生成、跨服务proto复用与兼容性设计。

    2026.10.10

    20

    15

    C++虚函数怎么定义和调用
    C++虚函数怎么定义和调用

    C++虚函数是实现运行时多态的重要机制。本专题从virtual关键字的基本用法入手,介绍基类与派生类之间的函数重写、基类指针调用派生类方法,以及动态绑定的执行过程,帮助初学者掌握虚函数的核心语法。

    2026.10.10

    40

    26

    C++类与对象的封装方法教程
    C++类与对象的封装方法教程

    C++封装是面向对象编程的核心特性之一,通过类将数据与操作数据的函数组织在一起,并利用访问权限控制外部访问。本专题介绍类的定义、成员变量、成员函数以及public、private和protected的使用方法,帮助初学者掌握封装的基本原理。

    2026.10.10

    40

    32

    C++构造函数定义与调用方法
    C++构造函数定义与调用方法

    C++构造函数用于初始化类对象,是面向对象编程的重要基础。本专题从构造函数的定义、声明和调用入手,介绍默认构造函数、带参数构造函数、拷贝构造函数及成员初始化列表,帮助初学者掌握对象创建与初始化的基本方法。

    2026.10.10

    40

    16

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    LLVM Programmer’s Manual
    LLVM Programmer’s Manual

    共0课时 | 0人学习

    LLVM 语言参考手册
    LLVM 语言参考手册

    共0课时 | 0人学习

    Buffalo框架新项目生成指南
    Buffalo框架新项目生成指南

    共0课时 | 0人学习