【问题标题】:Scraping data from Transfermarkt - how to gain full names and surnames从 Transfermarkt 抓取数据 - 如何获取全名和姓氏
【发布时间】:2025-12-20 07:10:07
【问题描述】:

我创建了以下代码来从 Transfermarkt 中抓取数据。但是,结果是它不返回玩家的全名和姓氏,而是大部分(取决于长度)姓氏和玩家名字的第一个字母。

#single team
import requests
from bs4 import BeautifulSoup
import pandas as pd

headers = {'User-Agent': 
           'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'}

page = "https://www.transfermarkt.co.uk/manchester-united/startseite/verein/985"
pageTree = requests.get(page, headers=headers)
pageSoup = BeautifulSoup(pageTree.content, 'html.parser')


Players = pageSoup.find_all("span", {"class": "show-for-small"})
Values = pageSoup.find_all("td", {"class": "rechts hauptlink"})
PlayersList = []
ValuesList = []

length = len(Players)

for i in range(0,length):
    PlayersList.append(Players[i].text)
    ValuesList.append(Values[i].text)
    
df = pd.DataFrame({"Players":PlayersList,"Values":ValuesList})

df

它返回市场价值和球员姓名,如“D. De Gea”而不是“David De Gea”。

怎么了?我尝试了 HTML 的不同选项,但它们不起作用。

【问题讨论】:

  • 是否可以提供团队以便我们重现您的错误?
  • 嗨,我实际上是复制粘贴了代码,但没有发现“团队”部分。它实际上与那部分无关,因为我稍后使用了txt,但在那部分没有。
  • 请查看下面的解决方案。只有一个玩家一直只显示名字:“Fred”;-)

标签: python html pandas


【解决方案1】:

下面的代码可以显示全名。 它提取网页 HTML 中的“Spielprofil_tooltip”类中的文本元素,如下所示:

[<a class="spielprofil_tooltip" href="/david-de-gea/profil/spieler/59377" id="59377" title="David de Gea">David de Gea</a>,

唯一需要注意的是,这个“spielprofil_tooltip”添加了其他多余的名称(可能显示在网站上的其他表格中),因此我在最后一行中使用了[0:30]

headers = {'User-Agent': 
       'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'}

page = "https://www.transfermarkt.co.uk/manchester-united/startseite/verein/985"
pageTree = requests.get(page, headers=headers)
pageSoup = BeautifulSoup(pageTree.content, 'html.parser')

PlayersList = [x.text for x in pageSoup.find_all("a", {"class": "spielprofil_tooltip"})][::2] 
Values = pageSoup.find_all("td", {"class": "rechts hauptlink"})

ValuesList = []

length = len(Values)

for i in range(0,length):
    ValuesList.append(Values[i].text)

df = pd.DataFrame({"Players":PlayersList[0:30],"Values":ValuesList})

df

【讨论】:

  • 谢谢先生。要试试看:) 顺便说一句,它对我来说更适合 len(PlayerList)。你仍然有旗帜。