Seite 1 von 1
html-Datei auslesen auswerten
Verfasst: Mittwoch 21. April 2021, 19:02
von Rotmilan
Hallo,
ich versuche gerade ein „quasi webscraping“ aus gespeicherten html-Dateien zu realisieren.
Normalerweise gehe ich ja so vor, dass ich erst mit
response = requests.get(WEBADRESSE)
die Webseite anfrage, und dann den Inhalt an BeautifulSoup übergebe:
soup = BeautifulSoup(response.content, 'html.parser')
danach ist das Ganze klar. Nur, jetzt muss ich ja gar keine Webseite anfragen, sondern die gespeicherte html-Datei öffnen. Mit dem ganz normalen open kann ich dann nicht den „.content“-Befehl anwenden.
Gibt es eine Möglichkeit die Datei so zu öffnen, dass ich sie an BeautifulSoup übergeben kann?
Oder gehe ich das sowieso falsch an?
LG!
Re: html-Datei auslesen auswerten
Verfasst: Mittwoch 21. April 2021, 19:29
von nezzcarth
Rotmilan hat geschrieben: Mittwoch 21. April 2021, 19:02
Oder gehe ich das sowieso falsch an?
Nicht komplett, aber es wirkt auf mich ein bisschen so, als würden vielleicht noch grundlegende Verständnisprobleme insb. im Bereich Datentypen bestehen. Welchen Datentyp hat 'response'? Was ist 'response.content' und welchen Datentyp hat es? Welchen Datentyp hat das Objekt, das open zurückgibt? Und welchen Datentyp erwartet BeautifulSoup? Das kann man zum Beispiel gut mit 'help' und 'type' im interaktiven Interpreter herausfinden; auch 'dir' kann hilfreich sein.
Re: html-Datei auslesen auswerten
Verfasst: Mittwoch 21. April 2021, 21:04
von Rotmilan
Ja, das es eine Frage des Datentyps ist, war mir schon klar. Die Frage ist ja gerade eben, wie ich die html-Datei in den Datentyp bekomme, dass ich mit BeautifulSoup arbeiten kann...
Sorry, ich formuliere das als absoulter Neuling leider nicht wirklich gut...
Dass ich mir das mit type mal anschaue, wäre wohl naheliegend gewesen - mache ich gleich mal...
Danke
Re: html-Datei auslesen auswerten
Verfasst: Mittwoch 21. April 2021, 21:34
von Rotmilan
Ok, nachdem ich herausgefunden hatte, was BeautifulSoup für einen Datentyp braucht - nämlich String - war es nicht mehr schwer. Folgender Code erzeugt zumindest mal keinen Fehler mehr - bin gespannt, ob die weitere Verarbeitung jetzt wieder wie mit BeautifulSoup gewohnt geht...
Code: Alles auswählen
file = open(FILENAME)
filecontent = datei.read()
soup = BeautifulSoup(str(filecontent), 'html.parser')
datei.close()
Danke noch mal

Re: html-Datei auslesen auswerten
Verfasst: Mittwoch 21. April 2021, 22:20
von __blackjack__
@Rotmilan: Das dürfte wohl bei der letzten Zeile mit einem `NameError` aussteigen, weil `datei` nicht definiert ist. Dateien sollte man auch besser mit der ``with``-Anweisung verwenden um das schliessen sicherzustellen. Oder man arbeitet mit `pathlib.Path`, das hat Methoden um Dateien komplett zu lesen.
Bei Textdateien sollte man immer explizit eine Kodierung angeben. Was bei beliebigen HTML-Dateien schwierig werden kann, weil die in unterschiedlichen Kodierungen vorliegen können. `Response.content` ist auch gar keine Zeichenkette sondern ein `bytes`-Objekt.
`datei.read()` liefert bereits eine Zeichenkette — es macht keinen Sinn da `str()` mit aufzurufen.
Der Code wäre mit einem `Path`-Objekt nur diese Zeile:
Code: Alles auswählen
soup = BeautifulSoup(FILE_PATH.read_bytes(), "html.parser")
Re: html-Datei auslesen auswerten
Verfasst: Mittwoch 21. April 2021, 22:32
von Rotmilan
Sorry, das mit dem datei und file - da hab ich hier noch mal was geändert - sollte man nicht machen
`datei.read()` liefert bereits eine Zeichenkette — es macht keinen Sinn da `str()` mit aufzurufen.
Da datei.read() keinen String liefert, dachte ich das müsste so sein - schön zu wissen
Der Code wäre mit einem `Path`-Objekt nur diese Zeile
Das höre ich auch zum ersten mal
Vielen Dank
