Advertisements
Hello,
I can’t find a way to retrieve the words "TSV SCHOTT Mainz" from the HTML code because I don’t understand which section to target here. I’ve tried the following:
import requests
from bs4 import BeautifulSoup
# URL of the Borussia Dortmund "Alle Spiele" page
url = "https://www.bvb.de/Spiele/Alle-Spiele"
# Send an HTTP GET request to fetch the web page content
response = requests.get(url)
# Check if the request was successful
if response.status_code == 200:
# Parse the HTML content of the page
soup = BeautifulSoup(response.text, "html.parser")
# Locate the section of the page containing game information
game_section = soup.find("table", class_="statistics statistics-matchday")
# Check if the game_section exists
if game_section:
# Loop through the game information and extract details
for game in game_section.find_all("tr", class_="pointer"):
#date = game.find("td", class_="2 5").text.strip()
opponent = game.find("img", class_="opt").text.strip() ```
>Solution :
Just select the correct table and go row-by-row. In each row, get all text from <td>
:
import requests
from bs4 import BeautifulSoup
url = "https://www.bvb.de/Spiele/Alle-Spiele"
soup = BeautifulSoup(requests.get(url).content, "html.parser")
table = soup.select("table.statistics")
for row in soup.select("tr:has(td)"):
tds = [td.get_text(strip=True, separator=" ") for td in row.select("td")]
if len(tds) > 2:
team1, team2 = tds[1], tds[2]
print(f"{team1.strip(' -'):<30} {team2:<30}")
Prints:
TSV SCHOTT Mainz Borussia Dortmund
Borussia Dortmund 1. FC Köln
VfL Bochum Borussia Dortmund
Borussia Dortmund 1. FC Heidenheim 1846
Freiburg Borussia Dortmund
Paris SG Borussia Dortmund
Borussia Dortmund VfL Wolfsburg
Hoffenheim Borussia Dortmund
Borussia Dortmund Milan
Borussia Dortmund Union Berlin
Borussia Dortmund SV Werder
Newcastle Borussia Dortmund
Eintracht Frankfurt Borussia Dortmund
Borussia Dortmund Bayern München
Borussia Dortmund Newcastle
VfB Stuttgart Borussia Dortmund
Borussia Dortmund Borussia M'gladbach
Milan Borussia Dortmund
Bayer Leverkusen Borussia Dortmund
Borussia Dortmund Rasenballsport Leipzig
Borussia Dortmund Paris SG
FC Augsburg Borussia Dortmund
Borussia Dortmund Mainz 05
Darmstadt 98 Borussia Dortmund
1. FC Köln Borussia Dortmund
Borussia Dortmund VfL Bochum
1. FC Heidenheim 1846 Borussia Dortmund
Borussia Dortmund Freiburg
VfL Wolfsburg Borussia Dortmund
Borussia Dortmund Hoffenheim
Union Berlin Borussia Dortmund
SV Werder Borussia Dortmund
Borussia Dortmund Eintracht Frankfurt
Bayern München Borussia Dortmund
Borussia Dortmund VfB Stuttgart
Borussia M'gladbach Borussia Dortmund
Borussia Dortmund Bayer Leverkusen
Rasenballsport Leipzig Borussia Dortmund
Borussia Dortmund FC Augsburg
Mainz 05 Borussia Dortmund
Borussia Dortmund Darmstadt 98
OR: Alternatively, just use pd.read_html
:
from io import StringIO
import pandas as pd
import requests
url = "https://www.bvb.de/Spiele/Alle-Spiele"
df = pd.read_html(StringIO(requests.get(url).text))[0]
print(df)
Prints:
Datum Begegnungen Begegnungen.1 Ergebnis
0 Samstag, 12.08.2023 Anstoß um 15:30 Uhr TSV SCHOTT Mainz - Borussia Dortmund 1 : 6 (1 : 3)
1 Samstag, 19.08.2023 Anstoß um 18:30 Uhr Borussia Dortmund - 1. FC Köln 1 : 0 (0 : 0)
2 Samstag, 26.08.2023 Anstoß um 15:30 Uhr VfL Bochum - Borussia Dortmund 1 : 1 (1 : 0)
3 Freitag, 01.09.2023 Anstoß um 20:30 Uhr Borussia Dortmund - 1. FC Heidenheim 1846 2 : 2 (2 : 0)
...