Обязательный контент, расположенный внутри script
узла, который выглядит как
<script nonce="STATE_TRANSFER_TOKEN">window['TRANSFER_STATE'] = {...}</script>
. Вы можете попробовать выполнить следующие действия для извлечения данных в виде простого словаря Python:
import re
import json
import requests
source = requests.get("https://www.lineups.com/nba/lineups").text
dictionary = json.loads(re.search(r"window\['TRANSFER_STATE'\]\s=\s(\{.*\})<\/script>", source).group(1))
Опционально: Вставьте сюда вывод dictionary
и нажмите «Украсить», чтобы увидеть данные как читаемые JSON
Затем вы можете получить доступ к требуемому значению по ключу, например,
for player in dictionary['https://api.lineups.com/nba/fetch/lineups/gateway']['data'][0]['home_players']:
print(player['name'])
Kyrie Irving
Jaylen Brown
Jayson Tatum
Gordon Hayward
Al Horford
for player in dictionary['https://api.lineups.com/nba/fetch/lineups/gateway']['data'][0]['away_players']:
print(player['name'])
D.J. Augustin
Evan Fournier
Jonathan Isaac
Aaron Gordon
Nikola Vucevic
Обновление
Наверное, я только что сделал это слишком сложно:)
Это должно быть так просто, как показано ниже:
import requests
source = requests.get("https://api.lineups.com/nba/fetch/lineups/gateway").json()
for player in source['data'][0]['away_players']:
print(player['name'])
Обновление 2
Чтобы получить составы всех команд, используйте ниже:
import requests
source = requests.get("https://api.lineups.com/nba/fetch/lineups/gateway").json()
for team in source['data']:
print("\n%s players\n" % team['home_route'].capitalize())
for player in team['home_players']:
print(player['name'])
print("\n%s players\n" % team['away_route'].capitalize())
for player in team['away_players']:
print(player['name'])