您在页面上看到的数据是通过Java脚本从外部URL加载的(因此beautifulsoup
看不到它).要模拟这些请求,您可以使用以下示例:
from itertools import zip_longest
import requests
from bs4 import BeautifulSoup
headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/117.0"
}
url = "https://www.sofascore.com/sassuolo-atalanta/LdbsTfb"
soup = BeautifulSoup(requests.get(url, headers=headers).content, "html.parser")
id_ = soup.select_one('link[href*="android-app:"]')["href"].split("/")[-1]
lineups_url = f"https://api.sofascore.com/api/v1/event/{id_}/lineups"
# for goals, substitutions etc use this url:
# incidents_url = "https://api.sofascore.com/api/v1/event/11407341/incidents"
lineups = requests.get(lineups_url, headers=headers).json()
for h, a in zip_longest(lineups["home"]["players"], lineups["away"]["players"]):
if h:
h = h["player"]["name"] + f" ({h['player']['position']})"
else:
h = "-"
if a:
a = a["player"]["name"] + f" ({a['player']['position']})"
else:
a = "-"
print(f"{h:<50} {a:<50}")
打印:
Andrea Consigli (G) Juan Musso (G)
Jeremy Toljan (D) Berat Djimsiti (D)
Martin Erlić (D) Giorgio Scalvini (D)
Mattia Viti (D) Sead Kolašinac (D)
Matías Viña (D) Davide Zappacosta (M)
Matheus Henrique (M) Marten de Roon (M)
Maxime López (M) Teun Koopmeiners (M)
Grégoire Defrel (F) Mario Pašalić (F)
Nedim Bajrami (M) Matteo Ruggeri (M)
Armand Laurienté (F) Ademola Lookman (F)
Andrea Pinamonti (F) Duván Zapata (F)
Filippo Missori (D) Éderson (M)
Kristian Thorstvedt (M) Charles De Ketelaere (M)
Kevin Miranda (D) Gianluca Scamacca (F)
Cristian Volpato (M) Nadir Zortea (D)
Samuele Mulattieri (F) Michel Ndary Adopo (M)
Gianluca Pegolo (G) Francesco Rossi (G)
Alessio Cragno (G) Marco Carnesecchi (G)
Yeferson Paz (M) Rafael Tolói (D)
Luca Lipani (M) Caleb Okoli (D)
Daniel Boloca (M) Mitchel Bakker (M)
Emil Konradsen Ceide (F) Luis Muriel (F)