Wenn Sie BeautifulSoup zum Parsen von HTML verwenden, kann Folgendes auftreten Keine Ergebnisse oder AttributeError-Ausnahmen im Zusammenhang mit NoneType-Objekten. Diese treten auf, wenn ein bestimmtes Element oder Attribut in den analysierten Daten nicht gefunden werden kann.
BeautifulSoup bietet sowohl Einzelergebnis- als auch Mehrfachergebnis-Abfragen. Methoden wie .find_all, die mehrere Ergebnisse unterstützen, geben eine leere Liste zurück, wenn keine passenden Elemente gefunden werden.
Methoden wie .find und .select_one, die ein einzelnes Ergebnis erwarten, geben jedoch None zurück, wenn keine Übereinstimmung gefunden wird. Dies ist anders als bei anderen Programmiersprachen, bei denen stattdessen möglicherweise eine Ausnahme ausgelöst wird.
So vermeiden Sie AttributeError-Fehler beim Arbeiten mit None-Ergebnissen aus Einzelergebnismethoden:
Betrachten Sie die Codebeispiele aus der Frage:
print(soup.sister) # Returns None because no <sister> tag exists print(soup.find('a', class_='brother')) # Returns None because no <a> tag with class="brother" exists print(soup.select_one('a.brother')) # Returns None, same reason as above soup.select_one('a.brother').text # Throws AttributeError because 'None' has no 'text' attribute
Um diese Szenarien richtig zu handhaben, verwenden Sie die folgenden Techniken:
if soup.sister is not None: print(soup.sister.name) # Safely accesses the tag name try: print(soup.find('a', class_='brother').text) except AttributeError: print("No 'brother' class found") # Catches the potential error brother_text = soup.select_one('a.brother') or "Brother not found" # Assigns a default value if not found
Durch Befolgen dieser Richtlinien können Sie AttributeError-Ausnahmen verhindern und None-Ergebnisse effektiv verarbeiten, wenn Sie BeautifulSoup zum Parsen verwenden HTML.
Das obige ist der detaillierte Inhalt vonWarum gibt BeautifulSoup manchmal „Keine' zurück und wie vermeide ich AttributeErrors?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!