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

TransferMarkt复杂页面转会数据爬取:空DataFrame问题求助

排查TransferMarkt英超转会数据爬取空DataFrame问题

以下是几个常见的排查方向和解决方法:

1. 请求头缺失触发反爬机制

TransferMarkt会校验请求的User-Agent等头部信息,未携带合法请求头时,服务器可能返回空页面或反爬拦截内容。检查你的请求代码是否添加了完整请求头:

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
response = requests.get(target_url, headers=headers)

调试时可先打印response.status_code确认返回200,再打印response.text前1000字符,验证是否是正常页面内容。

2. 页面元素选择器定位错误

TransferMarkt的转会表格结构有明确标识:

  • 转入(In)表格带有data-tab="in"属性,转出(Out)表格带有data-tab="out"属性,表格本身通常有class="responsive-table"
  • 若你使用的选择器(如错误的class名称、标签层级)不正确,会导致BeautifulSoup无法找到目标表格。

示例正确的表格定位代码:

# 定位转入表格
in_table = soup.find('table', attrs={'data-tab': 'in'})
# 定位转出表格
out_table = soup.find('table', attrs={'data-tab': 'out'})

若in_table或out_table返回None,说明选择器不匹配当前页面结构,需对照页面截图调整选择器。

3. 动态内容加载问题

如果页面的转会表格是通过JavaScript动态渲染的,仅用requests获取的静态HTML中不会包含表格数据。此时需要改用selenium或playwright模拟浏览器加载页面后再提取内容:

from selenium import webdriver
from selenium.webdriver.common.by import By
import pandas as pd

driver = webdriver.Chrome()
driver.get(target_url)
# 等待表格加载,可添加显式等待
in_table = driver.find_element(By.CSS_SELECTOR, 'table[data-tab="in"]')
# 后续提取逻辑...
driver.quit()

4. 数据提取逻辑漏洞

即使成功定位到表格,错误的行/列提取逻辑也会导致空DataFrame:

  • 需排除表头行、空行(如带有class="thead"的行)
  • 提取单元格内容时,要使用.text.strip()清理空白字符,避免提取到空字符串
  • 检查表格列的索引是否正确,比如球员名、转会费所在的<td>位置是否和页面结构一致

示例完整的表格数据提取逻辑:

def extract_transfer_data(table):
    if not table:
        return pd.DataFrame()
    # 获取所有数据行(排除表头)
    rows = table.find_all('tr', class_=['odd', 'even'])
    transfer_data = []
    for row in rows:
        cols = row.find_all('td')
        if len(cols) >= 5:  # 确保有足够的列数据
            player = cols[1].text.strip()
            club = cols[3].text.strip()
            fee = cols[4].text.strip()
            transfer_data.append({
                'Player': player,
                'Club': club,
                'Transfer Fee': fee
            })
    return pd.DataFrame(transfer_data)

in_transfers_df = extract_transfer_data(in_table)
out_transfers_df = extract_transfer_data(out_table)

5. 目标页面URL错误

确认你爬取的球队转会页面URL是否正确,需包含正确的球队ID、赛季参数。比如阿森纳2023/24赛季的转会页URL为:https://www.transfermarkt.co.uk/arsenal-fc/transfers/verein/11/saison_id/2023,参数错误会导致页面无转会数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:42:44