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

如何用R或Python抓取Transfermarkt球员身价图表数据?

抓取Transfermarkt身价图表数据的方法

Transfermarkt的身价图表数据是通过动态加载的JSON渲染的,不在静态HTML节点里,所以SelectorGadget这类工具无法直接抓取。以下是Python和R的实现方法:

Python实现步骤

  1. 模拟浏览器请求页面,避免被反爬拦截
  2. 提取页面中存储图表数据的<script>标签内容
  3. 解析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实现步骤

  1. 使用rvest包模拟浏览器请求页面
  2. 用正则表达式提取存储图表数据的JSON字符串
  3. 解析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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:54:22