Ich versuche, den Inhalt eines einzelnen "Wert" -Attributs in einem bestimmten "Eingabe" -Tag auf einer Webseite zu extrahieren. Ich benutze den folgenden Code:
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)
Ich erhalte einen TypeError: Listenindizes müssen Ganzzahlen sein, nicht str
Obwohl ich aus der Beautifulsoup-Dokumentation verstehe, dass Strings hier kein Problem sein sollten ... aber ich bin kein Spezialist und habe sie möglicherweise falsch verstanden.
Jeder Vorschlag wird sehr geschätzt! Danke im Voraus.
quelle
output = inputTag[0].contents
inputTag[0].get('value')
stattdessen verwendeninputTag[0]['value']
, um keinen Zeiger zu verhindern, falls das Tag keinIn
Python 3.x
, verwenden Sie einfachget(attr_name)
auf das Tag - Objekt , das Sie erhalten , mitfind_all
:gegen XML-Datei
conf//test1.xml
, die aussieht wie:Drucke:
quelle
Wenn Sie mehrere Werte von Attributen aus der obigen Quelle abrufen möchten, können Sie mithilfe
findAll
eines Listenverständnisses alles erhalten, was Sie benötigen:quelle
Ich würde Ihnen tatsächlich einen zeitsparenden Weg vorschlagen, vorausgesetzt, Sie wissen, welche Art von Tags diese Attribute haben.
Angenommen, ein Tag xyz hat das Attritube mit dem Namen "stackinfo".
Und ich möchte nicht, dass Sie verstehen, dass full_tag eine Liste ist
Somit können Sie alle attrb-Werte von Staininfo für alle Tags xyz abrufen
quelle
Sie können dies auch verwenden:
quelle
Ich verwende dies mit Beautifulsoup 4.8.1, um den Wert aller Klassenattribute bestimmter Elemente zu erhalten:
Es ist wichtig zu beachten, dass der Attributschlüssel eine Liste abruft, auch wenn das Attribut nur einen einzigen Wert hat.
quelle