@sveni_lee: Die Einrücktiefe sollte vier Leerzeichen pro Ebene betragen und nicht nur drei. Die Namensschreibweise entspricht auch nicht dem
Style Guide for Python Code. Dem folgend sollten auch bei BeautifulSoup die neuen Namen verwendet werden, also `find_all()` statt `findAll()`. Letzteres wird irgendwann ausgemustert.
Wenn man anfängt Namen durchzunummerieren macht man mit ziemlicher Sicherheit etwas falsch. Entweder war man zu faul sich einen vernünftigen Namen auszudenken, oder man wollte eigentlich eine Datenstruktur, meistens eine Liste, verwenden. Im Fall von `soup1` ist das aber einfach nur falsch. Das Argument wird beim Aufruf gar nicht übergeben und dort wo es verwendet wird, sollte wohl eher das nicht verwendendete, lokale `soup` benutzt werden.
Warum ist die URL unnötig in Klammern gesetzt?
`self.get_title()` ”riecht” komisch. Warum ist das eine Methode? Auf welchen Zustand des Objekts wird darin zugegriffen? `get_SerienSendetermine()` müsste dann ja auch eine Methode sein, da wird das Objekt aber auch überhaupt nicht benutzt.
`all` ist der Name einer eingebauten Funktion, den sollte man nicht an etwas anderes binden.
Wenn man bei BeautifulSoup reguläre Ausdrücke verwendet, dann müssen das kompilierte Ausdrücke sein, sonst kann die Bibliothek reguläre Ausdrücke von normalen Zeichenketten nicht unterscheiden. Bei 'class' könnte es ein Problem mit dem Ausdruck geben weil 'class' nicht als *ein* Wert behandelt wird, also weder von HTML noch von BeautifulSoup.
`title` wird an zwei verschiedene Werte gebunden, also eine doppelverwendung des gleichen Namens für unterschiedliche Bedeutungen.
Die ``print``-Zeilen scheinen mir nicht weit genug eingerückt‽ Es wird auf jeden Fall nicht der Fall behandelt, dass kein Titel gefunden wird in der Schleife, was im ersten Durchlauf der äusseren Schleife zu einer Ausnahme führen würde weil `title` nicht definiert ist, oder zu Ausgaben von `title`-Werten aus vorherigen Durchläufen der äusseren Schleife.
Bei solchen Aufgaben bietet es sich an das in einer interaktiven Python-Shell einfach mal Schritt für Schritt durchzuführen, sich die Zwischenergebnisse anzuschauen und die Aufrufe und Argumente ”live” zu entwicklen.
Die Funktion mit den oben genannten Änderungen (ungetestet):
Code: Alles auswählen
def get_seriensendetermine():
soup = BeautifulSoup(
get_content('http://www.wunschliste.de/serienplaner/0/0')
)
for li_node in soup.find_all('li', {'id': re.compile(r'e_[^\s]*')}):
for title_node in li_node.find_all(
'td', {'class': re.compile(r'sendung b[^\s]*')}
):
title = title_node.get_text()
print('===========TESTSERIE START=============')
print('Title :', title)
print('===========TESTSERIE END===============')