How can I retrieve "TSV SCHOTT Mainz" from HTML using Python

Advertisements

Screenshot HTML Code

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)

...

Leave a ReplyCancel reply