如何用R或Python抓取Transfermarkt球员身价图表数据?
抓取Transfermarkt身价图表数据的方法
Transfermarkt的身价图表数据是通过动态加载的JSON渲染的,不在静态HTML节点里,所以SelectorGadget这类工具无法直接抓取。以下是Python和R的实现方法:
Python实现步骤
- 模拟浏览器请求页面,避免被反爬拦截
- 提取页面中存储图表数据的
<script>标签内容 - 解析JSON格式的图表数据,提取日期和身价信息
import requests import json from bs4 import BeautifulSoup import time url = "https://www.transfermarkt.de/joshua-kimmich/marktwertverlauf/spieler/161056" headers = { "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" } # 发送请求,添加延迟避免反爬 time.sleep(2) response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') # 定位包含chartData的script标签 script_content = soup.find('script', string=lambda text: text and 'chartData' in text) if script_content: # 提取JSON数据部分 raw_json = script_content.string.split('chartData = ')[1].rstrip(';') chart_data = json.loads(raw_json) # 提取日期和身价数值(单位:百万欧元) date_list = chart_data['xAxis']['categories'] value_list = chart_data['series'][0]['data'] # 输出结果 for date, value in zip(date_list, value_list): print(f"{date}: {value} Mio. €")
R实现步骤
- 使用
rvest包模拟浏览器请求页面 - 用正则表达式提取存储图表数据的JSON字符串
- 解析JSON并转换为数据框格式
library(rvest) library(jsonlite) library(stringr) library(httr) url <- "https://www.transfermarkt.de/joshua-kimmich/marktwertverlauf/spieler/161056" headers <- c( "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" ) # 发送请求,添加延迟 Sys.sleep(2) page_response <- GET(url, add_headers(.headers = headers)) page_html <- read_html(page_response) # 提取包含chartData的script文本 script_text <- page_html %>% html_elements("script") %>% html_text() %>% str_subset("chartData") # 提取并解析JSON数据 json_raw <- str_extract(script_text, "(?<=chartData = ).*(?=;)") chart_data <- fromJSON(json_raw) # 整理成数据框 result_df <- data.frame( 日期 = chart_data$xAxis$categories, 身价_百万欧元 = chart_data$series[[1]]$data ) print(result_df)
注意事项
- 频繁请求可能触发Transfermarkt的反爬机制,建议每次请求后添加1-3秒延迟
- 页面结构若发生变化,需调整
<script>标签的定位逻辑或正则表达式 - 数据中的身价数值直接对应百万欧元单位
内容的提问来源于stack exchange,提问作者mbenny
相关产品推荐
相关产品推荐

