@kaaniboy68: Das mit dem Encoding gilt für Textdateien, also so wie das Programm jetzt ist, auch für den HTML-Quelltext der eingelesen wird. Alternativ kann man den auch als Binärdaten einlesen und an `BeautifulSoup` verfüttern.
Auch beim einlesen sollte man die Datei sicher wieder schliessen und sich nicht auf die autmatische Speicherbereinigung verlassen. Also ``with`` auch dort verwenden, oder `pathlib.Path` was eine Methode hat die sich um öffnen, einlesen, schliessen kümmert.
Beim öffnen von Dateien für das `csv`-Modul ist es wichtig ``newline=""`` als Argument anzugeben, sonst kann man damit kaputte CSV-Dateien erzeugen.
Die Schriebweise von `findAll()` entspricht nicht den Namenskonventionen, darum sollte man diese Methode nicht mehr verwenden, sondern `find_all()`. Was übrigens den gleichen Effekt hat wie das `Tag`-Objekt direkt aufzurufen.
Die innere ``for``-Schleife lässt sich leicht als „list comprehension“ ausdrücken. Und wenn man das gemacht hat, sieht man, dass man das dann auch mit der äusseren ``for``-Schleife machen kann.
Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python3
import csv
from pathlib import Path
from bs4 import BeautifulSoup
HTML_FILE_PATH = Path(
"/Users/kaanekici/Documents/Programmiern/GymHVertretungen/GymHVertretungenHTML.html"
)
def main():
soup = BeautifulSoup(HTML_FILE_PATH.read_bytes(), "lxml")
output_rows = [
[column.text for column in table_row("td")]
for table_row in soup.find(class_="TabelleVertretungen")("tr")
]
with open("output.csv", "w", newline="", encoding="utf-8") as csv_file:
csv.writer(csv_file).writerows(output_rows)
if __name__ == "__main__":
main()