Ах, хорошо. Понимаю. Вы неправильно указали URL. Во-первых, вам нужно сбросить .html
. Во-вторых, вам нужно найти URL-адреса, которые на самом деле могут получить данные. К сожалению, нет конечной точки API (которую я вижу здесь), чтобы получить данные игрока.
Поэтому немного другой подход заключается в том, чтобы получить доступ к каждому профилю игрока и получить его таким образом. Но для того, чтобы попасть в профиль игрока, вам нужен playerID для итерации. Это займет некоторое время, так как нужно извлечь из профиля / URL каждого игрока, но выполнить работу:
import requests
from bs4 import BeautifulSoup
from requests_html import HTMLSession
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36'}
#Get playerIDs
url = 'https://www.fifa.com/worldcup/players/_libraries/byposition/all/_players-list'
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.text,"html.parser")
playerIDs = soup.find_all('a', {'class':'fi-p--link '})
playerDict = {}
for player in playerIDs:
name = player.find('div',{'class':'fi-p__name'}).text.strip()
playerID = player['data-player-id']
playerDict[name] = playerID
for player_name, playerID in playerDict.items():
#Request URL
url = 'https://www.fifa.com/worldcup/_libraries/players/player/%s/_player-profile-data' %playerID
page = requests.get(url, headers=headers)
#Fetch webpage
soup = BeautifulSoup(page.text,"html.parser")
player_age = soup.find('div',{'class':'fi-p__profile-number__number'}).text.strip()
print('%-20s Age: %s' %(player_name, player_age))
Вывод:
Aaron MOOY Age: 29
ABDALLA SAID Age: 34
Abdiel ARROYO Age: 26
Abdoulaye DIALLO Age: 27
ABDULLAH ALKHAIBARI Age: 23
ABDULLAH ALMUAIOUF Age: 33
ABDULLAH OTAYF Age: 27
Abdullahi SHEHU Age: 26
ABDULMALEK ALKHAIBRI Age: 33
Abel AGUILAR Age: 35
Achraf HAKIMI Age: 21
Adama MBENGUE Age: 26
Adem LJAJIC Age: 28
Adil RAMI Age: 34
Adnan JANUZAJ Age: 25
Adolfo MACHADO Age: 34
ADRIEN SILVA Age: 30
AHMED ELMOHAMADY Age: 32
AHMED FATHI Age: 35
...