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

如何用R抓取Transfermarkt网页表格多页数据及补全国家名称

解决方案

问题1:补充国家名称

Transfermarkt网页中,国旗图片的alt属性存储了对应的国家名称,需要单独提取后添加到数据框中,而非仅依赖html_table抓取。

问题2:多页数据抓取

该网站的分页参数为page,在原URL后追加&page=页码即可访问对应页面,通过循环遍历1-17页实现批量抓取。

完整代码

library(rvest)
library(dplyr)
library(purrr)
library(httr)

# 定义单页抓取函数
scrape_tm_page <- function(page_num) {
  # 构造目标页面URL
  url <- paste0("https://www.transfermarkt.com/wettbewerbe/europa/wettbewerbe?plus=1&page=", page_num)
  
  # 模拟浏览器请求,避免反爬拦截
  session <- html_session(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"))
  
  # 抓取表格数据
  raw_table <- session %>% 
    html_nodes("table.items") %>% 
    html_table(fill = TRUE) %>% 
    .[[1]]
  
  # 提取国旗对应的国家名称
  country_list <- session %>% 
    html_nodes("table.items img.flaggenrahmen") %>% 
    html_attr("alt")
  
  # 清理表格并添加国家列
  cleaned_table <- raw_table %>% 
    filter(!is.na(Rang)) %>% # 过滤重复的表头行
    mutate(Country = country_list) %>% 
    select(Rang, Country, everything()) # 调整列顺序,将国家列前置
  
  return(cleaned_table)
}

# 批量抓取1-17页数据并合并
all_competitions <- map_df(1:17, scrape_tm_page)

# 查看结果示例
head(all_competitions)

关键说明

  • user_agent设置:模拟浏览器请求,避免被网站的反爬机制拦截。
  • 选择器验证:如果后续网站结构更新,需检查table.items(目标表格类)和img.flaggenrahmen(国旗图片类)是否仍有效,可通过浏览器开发者工具确认。
  • 表格清理:html_table可能会抓取到重复的表头行,通过filter(!is.na(Rang))过滤空值行保证数据整洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:47:47