Seite 1 von 1

Web scraping von Tabellen

Verfasst: Samstag 8. April 2023, 12:11
von Westdeutschland
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

Re: Web scraping von Tabellen

Verfasst: Samstag 8. April 2023, 12:34
von Westdeutschland
kann man das Bild sehen?

Re: Web scraping von Tabellen

Verfasst: Samstag 8. April 2023, 13:31
von __deets__
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.

Re: Web scraping von Tabellen

Verfasst: Sonntag 9. April 2023, 00:23
von HarteWare
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...

Re: Web scraping von Tabellen

Verfasst: Sonntag 9. April 2023, 13:03
von __blackjack__
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.