Die Prüfung für Attribute in BeautifulSoup?
Ich bin Parsen, Daten aus HTML zu Fuß durch die Elemente auf einer bestimmten Ebene mit nextSibling, und machen verschiedene Dinge je nach tag-name und Klasse von jedem element begegnet.
z.B.,
if n.name == "p" and n.class == "poem": blah()
Aber das wirft einen Fehler, wenn das element nicht über eine Klasse oder wenn es nicht eine Instanz von Tag-und hat daher auch keine Namen.
Testen, bevor Sie auf, wie diese
if "name" in n:
immer false zurück. Ich konnte, überprüfen Sie den Typ des Objekts zurückgegeben haben nextSibling, um zu versuchen, Unkraut aus NavigableString und Kommentar, aber es muss doch auch einen einfacheren Weg.
BEARBEITEN
Per E-Mail die dev von BeautifulSoup mit dieser Frage, und er empfahl die Prüfung mit
n.get("class")
gibt Keine, wenn "Klasse" nicht gesetzt ist, die es möglich macht, nur:
if n.get("class") == "poem": blah()
InformationsquelleAutor blocks | 2011-08-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Neben der Verwendung
get()
MethodeAndere Möglichkeit ist die Verwendung
has_attr()
(verwenden Siehas_key()
pre BeautifulSoup 4):n.has_key()
wurde als veraltet markiert undn.has_attr("class")
bevorzugtInformationsquelleAutor Jasper van den Bosch
In diesem Fall Ausnahmen kann dein Freund sein:
Können Sie auch wickeln Sie es in eine
except
wenn dies im Fall:InformationsquelleAutor Michał Bentkowski
Versuchen, diese~:
if class in n.attrs
n.attrs
ist eine Liste mit Tupeln, wie diese:[(u'class', u'my-class'), (u'id', u'my-id')]
. Sie müssen drehen Sie die Liste in einedict
ersten.InformationsquelleAutor CDT
Warum nicht?
hasattr(n,"class") == true bedeutet n.class existiert, nicht n["class"]
Referenzierung "n.class" yeilds "Syntax-Fehler" (ich glaube, weil "Klasse" ist ein Schlüsselwort")? "hasattr(n, "class") ist auch mir false positives, also mehr Schlüssel Fehler.
Lesen Sie die beautifulsoup docs " beschreiben Sie die Optionen für den Umgang mit markup-Attribute, die in Konflikt mit python-reservierte Wörter. Aber dein grundlegendes problem ist, du bist verwirrend Attribut zugreifen, z.B. x.y mit item-Zugriff x[y]. Sie sind nicht die gleiche Sache in python.
Ich habe schlug meinen Kopf gegen die BeautifulSoup docs, und ich sehe nicht die Antwort auf meine Frage. Sie befassen sich mit den attr-Wörterbuch für Attribute, die in Konflikt mit python-Schlüsselwörtern, sondern nur im Kontext der Suche. Ich bin nicht auf der Suche - ich habe ein element, und ich bin versucht nur zu sehen, wenn es eine Klasse. n["class"] erfolgreich greift auf die Klasse, wenn es vorhanden ist, aber ich bin noch auf der Suche für den check - hasattr(n, "Klasse") nicht funktioniert.
InformationsquelleAutor abeyer