You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何抓取非Table类的网页球员数据表格?以Transfermarkt为例

解决方案

因为目标页面的球员信息采用div布局而非标准table标签,所以不能直接用html_table()提取。以下是调整后的代码,可将数据整理为data frame格式:

步骤1:加载依赖包

需要用到rvest(网页解析)、dplyr(数据处理)和httr(自定义请求头):

library(rvest)
library(dplyr)
library(httr)
library(tidyr) # 用于转宽格式(可选)

步骤2:获取页面内容

添加User-Agent绕过网站反爬机制:

url <- "https://www.transfermarkt.de/mamadou-doucoure/profil/spieler/340480"

# 构造带User-Agent的请求
page <- GET(url, user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")) %>%
  content()

步骤3:提取并整理数据

定位到信息容器,逐行提取标签和对应值,再转换为data frame:

# 定位到包含所有球员基础信息的父容器
info_container <- page %>% html_node('div.row.collapse')

# 抓取每个数据项的行元素
data_rows <- info_container %>% html_nodes('div.row')

# 遍历行元素,提取标签和值
player_data <- lapply(data_rows, function(row) {
  label <- row %>% html_node('div.cell-25') %>% html_text(trim = TRUE)
  value <- row %>% html_node('div.cell-75') %>% html_text(trim = TRUE)
  tibble(Label = label, Value = value)
}) %>% bind_rows()

# (可选)转换为宽格式data frame,方便后续分析
player_data_wide <- player_data %>% pivot_wider(names_from = Label, values_from = Value)

说明

  • 页面中每个球员信息项都被包裹在div.row中,左侧div.cell-25是字段名,右侧div.cell-75是对应值,通过分别提取这两个元素的文本实现数据抓取。
  • 必须添加User-Agent,否则网站会拦截请求,导致无法获取内容。
  • player_data是长格式data frame,player_data_wide是宽格式,可根据需求选择使用。

内容的提问来源于stack exchange,提问作者Jalila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:35:17