Heim >Backend-Entwicklung >Python-Tutorial >Wie greife ich korrekt auf Attributwerte aus einer Liste zu, die von „findAll()' oder „find_all()' von BeautifulSoup zurückgegeben wird?
Zugriff auf Attributwerte mit BeautifulSoup
Beim Versuch, das Wertattribut aus einem bestimmten Eingabe-Tag mit BeautifulSoup und dem folgenden Code zu extrahieren:
import urllib f = urllib.urlopen("http://58.68.130.147") s = f.read() f.close() from BeautifulSoup import BeautifulStoneSoup soup = BeautifulStoneSoup(s) inputTag = soup.findAll(attrs={"name": "stainfo"}) output = inputTag['value'] print str(output)
ein Fehler tritt auf: TypeError: Listenindizes müssen Ganzzahlen sein, nicht str.
Die Dokumentation von BeautifulSoup legt nahe, dass Zeichenfolgen in solchen Szenarien kein Problem darstellen sollten. Der Fehler scheint jedoch auf etwas anderes hinzuweisen.
Lösung
Das Problem liegt in der Verwendung von .findAll(), das eine Liste aller gefundenen Elemente zurückgibt. Um auf das Wertattribut eines bestimmten Tags zuzugreifen, sollte man den folgenden Ansatz verwenden:
Verwenden Sie .find_all() anstelle von .findAll():
.find_all() gibt eine Liste aller gefundenen Elemente zurück, während .find_all() nur ein (erstes) gefundenes zurückgibt Element.
Greifen Sie auf das Wertattribut des ersten Elements in der Liste zu:
Da BeautifulSoup eine Liste der gefundenen Elemente zurückgibt, ist dies erforderlich um den Index des Elements anzugeben, auf das Sie zugreifen möchten. In diesem Fall kann auf das Wertattribut des ersten Elements in der Liste zugegriffen werden durch:
output = inputTag[0]['value']
Alternativ können Sie .find() verwenden, um das erste Element abzurufen:
Anstatt .find_all() zu verwenden, kann .find() verwendet werden, um das erste gefundene Objekt direkt abzurufen Element:
inputTag = soup.find(attrs={"name": "stainfo"}) output = inputTag['value']
Das obige ist der detaillierte Inhalt vonWie greife ich korrekt auf Attributwerte aus einer Liste zu, die von „findAll()' oder „find_all()' von BeautifulSoup zurückgegeben wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!