Neuling: Web Scraping

Code-Stücke können hier veröffentlicht werden.
Antworten
gekkou
User
Beiträge: 4
Registriert: Freitag 21. Januar 2022, 14:32

Hallo,

ich lerne seit einigen Wochen Python und jetzt ist ein neues Thema dran: Web Scraping. Leider scheitere ist hier bereits ganz am Anfang.

Ich versuche es mit dieser Anleitung: https://realpython.com/beautiful-soup-w ... er-python/

Dies ist der Code:

Code: Alles auswählen

#https://realpython.com/beautiful-soup-web-scraper-python/

import requests
from bs4 import BeautifulSoup

URL = "https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&spieledb_path=%2Fde%2Fcompetitions%2Fbundesliga%2Fseasons%2F1963-1964%2Fmatchday%2F1"
page = requests.get(URL)

soup = BeautifulSoup(page.content, "html.parser")

results = soup.find(id="c1013827")

job_elements = results.find_all("table", class_="table-match-comparison")

for job_element in job_elements:
    title_element = job_element.find("td", class_="column-team-title text-right hidden-xs")
    company_element = job_element.find("td", class_="column-score")
    location_element = job_element.find("td", class_="column-team-title text-left hidden-xs")
    print(title_element.text.strip())
    print(company_element.text.strip())
    print(location_element.text.strip())
    print()
    
Leider werden nicht alle Ergebnisse aufgelistet, sondern nur das erste:
SV Werder Bremen
3 : 2
Borussia Dortmund
Lasse ich mir job_element ausgeben, werden aber alle Inhalte geliefert, die ich brauche:

Code: Alles auswählen

for job_element in job_elements:
    print(job_element, end="\n"*2)
Ausgabe:

Code: Alles auswählen

<table class="table-match-comparison">
<thead>
<tr>
<th class="column-date">Datum</th>
<th class="text-right hidden-xs">Heim</th>
<th class="column-team-emblem"></th>
<th class="column-score"></th>
<th class="column-team-emblem"></th>
<th class="column-team-title text-left hidden-xs">Auswärts</th>
<th class="column-actions text-left">Links</th>
</tr>
</thead>
<tbody>
<tr id="match_187973">
<td class="column-date">
        Samstag,<br/>24.08.1963<br/>17:00 Uhr
      </td>
<td class="column-team-title text-right hidden-xs">
<a href="https://datencenter.dfb.de/competitions/bundesliga/seasons/1963-1964/teams/werder-bremen?datacenter_name=datencenter?historize_title=Bundesliga+1963%2F64%2C+1.+Spieltag&amp;historize_url=">SV Werder Bremen</a>
</td>
<td class="column-team-emblem"><img alt="Vereinslogo SV Werder Bremen" class="team-emblem team-emblem-large" src="http://assets.dfb.de/uploads/000/059/558/original_Bremen_Werder_1962_1976_1977_1994.jpg?1429707220"/></td>
<td class="column-score">
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fbundesliga%2F1963-1964%2F1-spieltag%2Fsv-werder-bremen-borussia-dortmund-187973">3 : 2</a>
</td>
<td class="column-team-emblem"><img alt="Vereinslogo Borussia Dortmund" class="team-emblem team-emblem-large" src="http://assets.dfb.de/uploads/000/070/092/original_dortmund_borussia_1945_1964.jpg?1437143138"/></td>
<td class="column-team-title text-left hidden-xs">
<a href="https://datencenter.dfb.de/competitions/bundesliga/seasons/1963-1964/teams/borussia-dortmund?datacenter_name=datencenter?historize_title=Bundesliga+1963%2F64%2C+1.+Spieltag&amp;historize_url=">Borussia Dortmund</a>
</td>
<td class="column-actions">
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fbundesliga%2F1963-1964%2F1-spieltag%2Fsv-werder-bremen-borussia-dortmund-187973"><i class="icon-caret-right"></i> Schema</a><br/>
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fmannschaftsvergleich%2Fwerder-bremen%2Fborussia-dortmund"><i class="icon-caret-right"></i> Vergleich</a>
</td>
</tr>
<tr id="match_187974">
<td class="column-date">
        Samstag,<br/>24.08.1963<br/>17:00 Uhr
      </td>
<td class="column-team-title text-right hidden-xs">
<a href="https://datencenter.dfb.de/competitions/bundesliga/seasons/1963-1964/teams/1-fc-saarbruecken?datacenter_name=datencenter?historize_title=Bundesliga+1963%2F64%2C+1.+Spieltag&amp;historize_url=">1. FC Saarbrücken</a>
</td>
<td class="column-team-emblem"><img alt="Vereinslogo 1. FC Saarbrücken" class="team-emblem team-emblem-large" src="http://assets.dfb.de/uploads/000/060/793/original_FC_Saarbruecken_1945_1948_1951_1981.jpg?1430753986"/></td>
<td class="column-score">
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fbundesliga%2F1963-1964%2F1-spieltag%2F1-fc-saarbruecken-1-fc-koeln-187974">0 : 2</a>
</td>
<td class="column-team-emblem"><img alt="Vereinslogo 1. FC Köln" class="team-emblem team-emblem-large" src="https://assets.dfb.de/uploads/000/018/194/small_fc-koeln.jpg?1493059529"/></td>
<td class="column-team-title text-left hidden-xs">
<a href="https://datencenter.dfb.de/competitions/bundesliga/seasons/1963-1964/teams/1-fc-koeln?datacenter_name=datencenter?historize_title=Bundesliga+1963%2F64%2C+1.+Spieltag&amp;historize_url=">1. FC Köln</a>
</td>
<td class="column-actions">
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fbundesliga%2F1963-1964%2F1-spieltag%2F1-fc-saarbruecken-1-fc-koeln-187974"><i class="icon-caret-right"></i> Schema</a><br/>
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fmannschaftsvergleich%2F1-fc-saarbruecken%2F1-fc-koeln"><i class="icon-caret-right"></i> Vergleich</a>
</td>
</tr>
<tr id="match_187975">
<td class="column-date">
        Samstag,<br/>24.08.1963<br/>17:00 Uhr
      </td>
<td class="column-team-title text-right hidden-xs">
<a href="https://datencenter.dfb.de/competitions/bundesliga/seasons/1963-1964/teams/tsv-1860-muenchen?datacenter_name=datencenter?historize_title=Bundesliga+1963%2F64%2C+1.+Spieltag&amp;historize_url=">TSV 1860 München</a>
</td>
<td class="column-team-emblem"><img alt="Vereinslogo TSV 1860 München" class="team-emblem team-emblem-large" src="http://assets.dfb.de/uploads/000/069/479/original_muenchen_tsv_1860_1952_1964.jpg?1436962021"/></td>
<td class="column-score">
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fbundesliga%2F1963-1964%2F1-spieltag%2Ftsv-1860-muenchen-eintracht-braunschweig-187975">1 : 1</a>
</td>
<td class="column-team-emblem"><img alt="Vereinslogo Eintracht Braunschweig" class="team-emblem team-emblem-large" src="http://assets.dfb.de/uploads/000/062/135/original_Braunschweiger_TSV_Eintracht_01_04_1949_bis_1965.jpg?1432035111"/></td>
<td class="column-team-title text-left hidden-xs">
<a href="https://datencenter.dfb.de/competitions/bundesliga/seasons/1963-1964/teams/eintracht-braunschweig?datacenter_name=datencenter?historize_title=Bundesliga+1963%2F64%2C+1.+Spieltag&amp;historize_url=">Eintracht Braunschweig</a>
</td>
<td class="column-actions">
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fbundesliga%2F1963-1964%2F1-spieltag%2Ftsv-1860-muenchen-eintracht-braunschweig-187975"><i class="icon-caret-right"></i> Schema</a><br/>
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fmannschaftsvergleich%2Ftsv-1860-muenchen%2Feintracht-braunschweig"><i class="icon-caret-right"></i> Vergleich</a>
</td>
</tr>
<tr id="match_187976">
<td class="column-date">
        Samstag,<br/>24.08.1963<br/>17:00 Uhr
      </td>
<td class="column-team-title text-right hidden-xs">
<a href="https://datencenter.dfb.de/competitions/bundesliga/seasons/1963-1964/teams/eintracht-frankfurt?datacenter_name=datencenter?historize_title=Bundesliga+1963%2F64%2C+1.+Spieltag&amp;historize_url=">Eintracht Frankfurt</a>
</td>
<td class="column-team-emblem"><img alt="Vereinslogo Eintracht Frankfurt" class="team-emblem team-emblem-large" src="http://assets.dfb.de/uploads/000/062/164/original_SG_Eintracht_Frankfurt_1957_bis_1965.jpg?1432041285"/></td>
<td class="column-score">
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fbundesliga%2F1963-1964%2F1-spieltag%2Feintracht-frankfurt-1-fc-kaiserslautern-187976">1 : 1</a>
</td>
<td class="column-team-emblem"><img alt="Vereinslogo 1. FC Kaiserslautern" class="team-emblem team-emblem-large" src="http://assets.dfb.de/uploads/000/060/760/original_FC_Kaiserslautern_1955_1969.jpg?1430746966"/></td>
<td class="column-team-title text-left hidden-xs">
<a href="https://datencenter.dfb.de/competitions/bundesliga/seasons/1963-1964/teams/1-fc-kaiserslautern?datacenter_name=datencenter?historize_title=Bundesliga+1963%2F64%2C+1.+Spieltag&amp;historize_url=">1. FC Kaiserslautern</a>
</td>
<td class="column-actions">
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fbundesliga%2F1963-1964%2F1-spieltag%2Feintracht-frankfurt-1-fc-kaiserslautern-187976"><i class="icon-caret-right"></i> Schema</a><br/>
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fmannschaftsvergleich%2Feintracht-frankfurt%2F1-fc-kaiserslautern"><i class="icon-caret-right"></i> Vergleich</a>
</td>
</tr>
<tr id="match_187977">
<td class="column-date">
        Samstag,<br/>24.08.1963<br/>17:00 Uhr
      </td>
<td class="column-team-title text-right hidden-xs">
<a href="https://datencenter.dfb.de/competitions/bundesliga/seasons/1963-1964/teams/fc-schalke-04?datacenter_name=datencenter?historize_title=Bundesliga+1963%2F64%2C+1.+Spieltag&amp;historize_url=">FC Schalke 04</a>
</td>
<td class="column-team-emblem"><img alt="Vereinslogo FC Schalke 04" class="team-emblem team-emblem-large" src="http://assets.dfb.de/uploads/000/063/845/original_FC_Schalke_04_1960_1978.jpg?1433247618"/></td>
<td class="column-score">
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fbundesliga%2F1963-1964%2F1-spieltag%2Ffc-schalke-04-vfb-stuttgart-187977">2 : 0</a>
</td>
<td class="column-team-emblem"><img alt="Vereinslogo VfB Stuttgart" class="team-emblem team-emblem-large" src="http://assets.dfb.de/uploads/000/070/086/original_stuttgart_vfb_1949_1994.jpg?1437141197"/></td>
<td class="column-team-title text-left hidden-xs">
<a href="https://datencenter.dfb.de/competitions/bundesliga/seasons/1963-1964/teams/vfb-stuttgart?datacenter_name=datencenter?historize_title=Bundesliga+1963%2F64%2C+1.+Spieltag&amp;historize_url=">VfB Stuttgart</a>
</td>
<td class="column-actions">
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fbundesliga%2F1963-1964%2F1-spieltag%2Ffc-schalke-04-vfb-stuttgart-187977"><i class="icon-caret-right"></i> Schema</a><br/>
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fmannschaftsvergleich%2Ffc-schalke-04%2Fvfb-stuttgart"><i class="icon-caret-right"></i> Vergleich</a>
</td>
</tr>
<tr id="match_187978">
<td class="column-date">
        Samstag,<br/>24.08.1963<br/>17:00 Uhr
      </td>
<td class="column-team-title text-right hidden-xs">
<a href="https://datencenter.dfb.de/competitions/bundesliga/seasons/1963-1964/teams/preussen-muenster?datacenter_name=datencenter?historize_title=Bundesliga+1963%2F64%2C+1.+Spieltag&amp;historize_url=">SC Preußen Münster</a>
</td>
<td class="column-team-emblem"><img alt="Vereinslogo SC Preußen Münster" class="team-emblem team-emblem-large" src="http://assets.dfb.de/uploads/000/066/228/original_Preussen_Mnster_1906_2008.jpg?1434706192"/></td>
<td class="column-score">
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fbundesliga%2F1963-1964%2F1-spieltag%2Fpreussen-muenster-hamburger-sv-187978">1 : 1</a>
</td>
<td class="column-team-emblem"><img alt="Vereinslogo Hamburger SV" class="team-emblem team-emblem-large" src="http://assets.dfb.de/uploads/000/059/581/original_Hamburger_SV_1950-1978.jpg?1429711668"/></td>
<td class="column-team-title text-left hidden-xs">
<a href="https://datencenter.dfb.de/competitions/bundesliga/seasons/1963-1964/teams/hamburger-sv?datacenter_name=datencenter?historize_title=Bundesliga+1963%2F64%2C+1.+Spieltag&amp;historize_url=">Hamburger SV</a>
</td>
<td class="column-actions">
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fbundesliga%2F1963-1964%2F1-spieltag%2Fpreussen-muenster-hamburger-sv-187978"><i class="icon-caret-right"></i> Schema</a><br/>
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fmannschaftsvergleich%2Fpreussen-muenster%2Fhamburger-sv"><i class="icon-caret-right"></i> Vergleich</a>
</td>
</tr>
<tr id="match_187979">
<td class="column-date">
        Samstag,<br/>24.08.1963<br/>17:00 Uhr
      </td>
<td class="column-team-title text-right hidden-xs">
<a href="https://datencenter.dfb.de/competitions/bundesliga/seasons/1963-1964/teams/karlsruher-sc?datacenter_name=datencenter?historize_title=Bundesliga+1963%2F64%2C+1.+Spieltag&amp;historize_url=">Karlsruher SC</a>
</td>
<td class="column-team-emblem"><img alt="Vereinslogo Karlsruher SC" class="team-emblem team-emblem-large" src="http://assets.dfb.de/uploads/000/060/547/original_Karlsruher_SC_1960_1998.jpg?1430404871"/></td>
<td class="column-score">
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fbundesliga%2F1963-1964%2F1-spieltag%2Fkarlsruher-sc-msv-duisburg-187979">1 : 4</a>
</td>
<td class="column-team-emblem"><img alt="Vereinslogo Meidericher SV" class="team-emblem team-emblem-large" src="http://assets.dfb.de/uploads/000/060/202/original_MSV_Duisburg_1908_1923.jpg?1430126082"/></td>
<td class="column-team-title text-left hidden-xs">
<a href="https://datencenter.dfb.de/competitions/bundesliga/seasons/1963-1964/teams/msv-duisburg?datacenter_name=datencenter?historize_title=Bundesliga+1963%2F64%2C+1.+Spieltag&amp;historize_url=">Meidericher SV</a>
</td>
<td class="column-actions">
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fbundesliga%2F1963-1964%2F1-spieltag%2Fkarlsruher-sc-msv-duisburg-187979"><i class="icon-caret-right"></i> Schema</a><br/>
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fmannschaftsvergleich%2Fkarlsruher-sc%2Fmsv-duisburg"><i class="icon-caret-right"></i> Vergleich</a>
</td>
</tr>
<tr id="match_187980">
<td class="column-date">
        Samstag,<br/>24.08.1963<br/>17:00 Uhr
      </td>
<td class="column-team-title text-right hidden-xs">
<a href="https://datencenter.dfb.de/competitions/bundesliga/seasons/1963-1964/teams/hertha-bsc?datacenter_name=datencenter?historize_title=Bundesliga+1963%2F64%2C+1.+Spieltag&amp;historize_url=">Hertha BSC</a>
</td>
<td class="column-team-emblem"><img alt="Vereinslogo Hertha BSC" class="team-emblem team-emblem-large" src="http://assets.dfb.de/uploads/000/065/544/original_berlin_hertha_1960_1968__1974_1987.jpg?1434375360"/></td>
<td class="column-score">
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fbundesliga%2F1963-1964%2F1-spieltag%2Fhertha-bsc-1-fc-nuernberg-187980">1 : 1</a>
</td>
<td class="column-team-emblem"><img alt="Vereinslogo 1. FC Nürnberg" class="team-emblem team-emblem-large" src="http://assets.dfb.de/uploads/000/071/285/original_nuernberg_1_fc_1945_1964.jpg?1438102141"/></td>
<td class="column-team-title text-left hidden-xs">
<a href="https://datencenter.dfb.de/competitions/bundesliga/seasons/1963-1964/teams/1-fc-nuernberg?datacenter_name=datencenter?historize_title=Bundesliga+1963%2F64%2C+1.+Spieltag&amp;historize_url=">1. FC Nürnberg</a>
</td>
<td class="column-actions">
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fbundesliga%2F1963-1964%2F1-spieltag%2Fhertha-bsc-1-fc-nuernberg-187980"><i class="icon-caret-right"></i> Schema</a><br/>
<a href="https://www.dfb.de/bundesliga/spieltagtabelle/?spieledb_path=/datencenter/bundesliga/2020-21/current&amp;spieledb_path=%2Fdatencenter%2Fmannschaftsvergleich%2Fhertha-bsc%2F1-fc-nuernberg"><i class="icon-caret-right"></i> Vergleich</a>
</td>
</tr>
</tbody>
</table>
Mir ist nicht klar, warum die Schleife bereits nach dem ersten Ergebnis abbricht. Hat hier jemand eine Idee? Ich glaube ich übersehe hier etwas ganz einfaches... .

Das ursprüngliche Beispiel funktioniert problemlos.

Danke im voraus!
gekkou
User
Beiträge: 4
Registriert: Freitag 21. Januar 2022, 14:32

Während des freischaltens des Beitrags bin ich selbst auf die Lösung gekommen. :D

job_elements muss die "tr" finden, die "match_" enthalten. Dann klappt es. Geändert werden muss also diese Zeile:

Code: Alles auswählen

job_elements = results.find_all ('tr', id=lambda x: x and x.startswith('match_'))
Sorry! :D
Antworten