讲师中心 微信公众号
AI工具推荐 视频效率加速

Rvest 网页爬虫实战:高效抓取日本职业棒球联盟(NPB)数据表

梦辰吖_9852

梦辰吖_9852

发布时间:2026-02-01 16:06:01

|

754人浏览过

|

来源于php中文网

原创

Rvest 网页爬虫实战:高效抓取日本职业棒球联盟(NPB)数据表

本文详解如何使用 r 语言的 rvest 包稳定抓取 npb.jp 网站上的多表格统计数据,重点解决 ssl 证书错误、动态结构识别与 css 选择器失效等常见问题,并提供可复用的健壮代码方案。

在使用 rvest 抓取日本职业棒球联盟(NPB)官网(如 https://npb.jp/bis/eng/2022/stats/std_c.html)时,许多用户会遇到“无法定位表格”的问题——即使 HTML 成功加载,html_nodes() 却返回空结果。这通常并非代码逻辑错误,而是由三方面原因导致:HTTPS 证书验证失败、网页实际 DOM 结构与开发者工具显示不一致、以及目标表格缺乏稳定 ID 或 class 标识。

首先,直接通过 URL 调用 read_html() 可能触发 SSL 证书错误(尤其在 Windows 或某些 R 版本下),导致页面解析中断或返回不完整 HTML。此时建议采用「本地缓存」策略:手动保存网页源码为 .html 文件(浏览器右键 → “查看页面源代码” → 全选复制 → 保存为 UTF-8 编码的 baseball.html),再从本地读取:

library(rvest)
library(magrittr)

# ✅ 推荐:绕过证书问题,确保 HTML 完整加载
url <- "baseball.html"  # 替换为你的本地路径
doc <- read_html(url)

其次,原问题中使用的 CSS 选择器 #stdivmaintbl > table > tbody > tr > td > div:nth-child(1) 过于具体且依赖 DOM 深层嵌套,极易因网页微小更新而失效。经检查,NPB 页面中所有主统计表格均包裹在具有统一类名 stdtblmain 的 <div> 中,这是更鲁棒的选择器:

Html2md
Html2md

使用 Readability + Turndown 将 HTML 页面转换为干净的、Agent 友好的 Markdown。去除导航栏、广告、页脚、Cookie 横幅、社交按钮等干扰元素。支持 URL...

下载
# ✅ 正确:定位所有主数据表容器
tables <- doc %>% html_nodes(".stdtblmain") %>% html_table(fill = TRUE)

html_table(fill = TRUE) 中的 fill = TRUE 参数至关重要——它能自动对齐跨行合并单元格(如 NPB 表中常见的“Team”跨行标题),避免列错位。最终 tables 是一个列表,其中 tables[[1]] 对应球队总览表,tables[[2]] 通常为投手/打者进阶统计表(依页面结构而定)。

⚠️ 注意事项:

  • 编码处理:若出现乱码(如日文字符显示为 ?),请在 read_html() 后显式声明编码:read_html(url, encoding = "UTF-8");
  • 反爬机制:NPB 官网虽无强反爬,但仍建议添加请求头模拟浏览器访问(适用于直连 URL 场景):
    url <- "https://npb.jp/bis/eng/2022/stats/std_c.html"
    doc <- read_html(url, 
                     timeout = 30,
                     httr::user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"))
  • 数据清洗提示:原始表格常含空行、合并标题行及占位符(如 "***" 表示“自身交锋”)。建议后续使用 dplyr::filter(!is.na(X1)) 清理空行,并用 tidyr::pivot_longer() 重构宽表。

总结而言,成功抓取 NPB 数据的关键在于:规避网络层障碍(证书/超时)、选用语义化 CSS 类选择器(.stdtblmain)、启用 fill = TRUE 处理复杂表格结构,并始终以本地 HTML 快照作为调试基准。该模式同样适用于 NPB 其他年份/赛季页面(只需替换 URL 路径),具备良好的可迁移性。

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

相关专题

更多
class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

3956

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

306

2025.12.06

DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

6521

2024.08.14

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3239

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2818

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

1488

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

2579

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3290

2023.08.08

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

0

2026.10.21

热门下载

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

精品课程

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

共14课时 | 1.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 6万人学习

CSS教程
CSS教程

共754课时 | 98万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn