0

0

如何抓取动态加载的马拉松成绩数据:从 iframe 中提取 HTML 表格

聖光之護

聖光之護

发布时间:2026-02-05 21:56:32

|

683人浏览过

|

来源于php中文网

原创

如何抓取动态加载的马拉松成绩数据:从 iframe 中提取 HTML 表格

本文详解当网页源码不包含浏览器中显示的数据时(如 valencia 马拉松排名页),如何定位真实数据源、识别 iframe 加载机制,并使用 requests + beautifulsoup 直接解析嵌入的 html 表格,避免依赖 selenium。

现代赛事成绩网站(如 Valencia Marathon 2021 成绩页)常采用 iframe 嵌入独立结果页面,导致你在主 URL 右键“查看网页源代码”时看不到运动员姓名、完赛时间等关键数据——这些内容实际由 iframe 的 src 指向的另一个 URL 动态加载,而非通过 JavaScript 渲染。这并非典型的 AJAX 或 SPA 场景,而是一种静态 HTML 嵌套结构,因此无需启动浏览器即可高效抓取。

关键步骤如下:

  1. 定位真实数据 URL:在浏览器开发者工具(F12)的 Elements 标签页中搜索

  2. 分析目标 HTML 结构:打开该 iframe URL,用 Ctrl+U 查看源码,确认成绩表格是否以标准

    形式存在(本例中为 ID 为 tabPodium 的表格),且无 JavaScript 动态渲染逻辑——这意味着 requests 可直接获取完整 HTML。

    立即学习前端免费学习笔记(深入)”;

  3. 使用 pandas.read_html() 高效解析:相比手动遍历

    凌动AI
    凌动AI

    免费上传PDF,支持真AI总结、多轮聊天、语音提问、多文件管理、思维导图导出、分享聊天记录链接。

    下载
  4. /
    ,pd.read_html() 能自动识别并转换 HTML 表格为 DataFrame,简洁可靠。配合 BeautifulSoup 提前筛选目标表格元素,可精准提取所需内容。

    以下是完整可运行代码示例:

    from io import StringIO
    import pandas as pd
    import requests
    from bs4 import BeautifulSoup
    
    # 真实成绩页面 URL(即 iframe 的 src)
    url = "https://www.php.cn/link/2636d8136e53d78459c2718e1bf82d34"
    
    # 获取页面 HTML
    response = requests.get(url)
    response.raise_for_status()  # 确保请求成功
    
    soup = BeautifulSoup(response.content, "html.parser")
    
    # 定位成绩表格(根据页面实际 ID 或 class 调整选择器)
    table = soup.select_one("#tabPodium")
    if not table:
        raise ValueError("未找到 ID 为 'tabPodium' 的表格,请检查页面结构是否更新")
    
    # 将表格 HTML 字符串转为 DataFrame
    df = pd.read_html(StringIO(str(table)))[0]
    print(df)

    输出示例:

       Unnamed: 0                Name Official time Country
    0           1   CHERONO, LAWRENCE       2:05:12     KEN
    1           2         DESO, CHALU       2:05:16     ETH
    2           3  KACHERAN, PHILEMON       2:05:19     KEN

    ⚠️ 注意事项:

    • 若页面启用了反爬(如 User-Agent 检查、频率限制),需为 requests.get() 添加合理 headers(如 'User-Agent': 'Mozilla/5.0...')并控制请求间隔;
    • 表格 ID(如 #tabPodium)可能随年份或赛事变更,建议先人工验证目标页面结构,或使用更鲁棒的选择器(如 soup.find('table', class_='results-table'));
    • pandas.read_html() 默认返回列表,索引 [0] 表示第一个匹配表格,若页面含多个表格请确认索引或添加 match= 参数过滤;
    • 此方法不适用于真正由 JavaScript 动态生成 DOM 的场景(如 React/Vue 渲染的表格),此时才需考虑 Selenium 或 Playwright。

    总结:面对“源码无数据”的网页,优先排查 iframe、AJAX 接口或静态资源链接,而非直接诉诸重量级自动化工具。理解网页架构(HTML 嵌套 vs JS 渲染)是高效抓取的前提——本例正是 iframe 静态加载的典型,轻量级方案即可完美解决。

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

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

下载

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

162

2023.06.14

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

160

2023.08.31

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

118

2023.11.15

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

237

2024.09.24

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

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

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

72

2025.12.04

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

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

3

2026.01.31

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1258

2023.10.19

java连接字符串方法汇总
java连接字符串方法汇总

本专题整合了java连接字符串教程合集,阅读专题下面的文章了解更多详细操作。

7

2026.02.05

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 11.1万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号