Web scraping von Tabellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Westdeutschland
User
Beiträge: 7
Registriert: Samstag 8. April 2023, 10:37

Sorry schon wieder ne Frage:
Hi@all,

Mein Code:
import requests
import pandas as pd
from bs4 import BeautifulSoup




url = 'https://www.jkg-wds.de/Schulintern/Vert ... st_001.htm'

r = requests.get(url)

soup = BeautifulSoup(r.text, 'html.parser')

rows = soup.find('table' , {'class':'mon_list'}).find_all('tr')

Vertretungsplan_list = []



for row in rows:
dic = {}

dic['Vertretungsplan'] = row.find_all('td')[0].text
dic



Vertretungsplan_list.append(dic)

print(Vertretungsplan_list)


Bei row.find_all("td")[0] bekomme ich die Fehlermeldung: list index out of range obwohl der index eigentlich stimmen müsste:

[img]file:///C:/Users/hans-/Pictures/Screenpresso/2023-04-08_13h29_06.png[/img]

Es würde mich freuen wenn ihr mir auch hier helfen könntet
Westdeutschland
User
Beiträge: 7
Registriert: Samstag 8. April 2023, 10:37

kann man das Bild sehen?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nein, kann man nicht. Du musst das hochladen bei einem Image-Hoster wie imgur, und dir dann davon den bbcode geben lassen, um es hier einzufuegen.

Code bitte in code-tags posten, damit die in Python relevanten Einrueckungen erhalten bleiben.
Benutzeravatar
HarteWare
User
Beiträge: 69
Registriert: Samstag 23. Februar 2013, 21:16
Wohnort: localhost

Die erste Reihe in der Tabelle enthält <th> (Header) anstatt <td>. Vermutlich kommt daher der Fehler.

Bild

Bei Webscraping gilt immer, für jede einzelne Abfrage immer auf Fehler prüfen und korrekt reagieren.

P.S.: Oh man, wie kann ich im Forum wieder die User auf der linken Seite der Beiträge anzeigen (ohne dass ich irgendein custom CSS integrieren muss)? Mein Kopp tut weh...
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Randbemerkung:``row.find_all("td")[0]`` ist auch etwas umständlich formuliert, wenn man nur das erste Element haben will erst alle zu suchen und davon dann nur das erste zu verwenden. ``row.find("td")`` beschreibt diesen Vorgang einfacher und direkter.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten