0

0

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

心靈之曲

心靈之曲

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

|

634人浏览过

|

来源于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 的

中,这是更鲁棒的选择器:
# ✅ 正确:定位所有主数据表容器
tables <- doc %>% html_nodes(".stdtblmain") %>% html_table(fill = TRUE)

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

VidAU
VidAU

VidAU AI 是一款AI驱动的数字人视频创作平台,旨在简化视频内容创作流程

下载

⚠️ 注意事项:

  • 编码处理:若出现乱码(如日文字符显示为 ?),请在 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工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

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

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

469

2024.01.03

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

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

17

2025.12.06

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

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

3416

2024.08.14

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

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

838

2023.07.26

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

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

1133

2023.07.27

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

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

804

2023.08.01

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

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

455

2023.08.02

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

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

2355

2023.08.08

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

30

2026.01.31

热门下载

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

精品课程

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

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

CSS教程
CSS教程

共754课时 | 26.1万人学习

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

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