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?

Wie greife ich korrekt auf Attributwerte aus einer Liste zu, die von „findAll()' oder „find_all()' von BeautifulSoup zurückgegeben wird?

DDD
Freigeben: 2024-12-08 02:40:12
Original
375 Leute haben es durchsucht

How to Correctly Access Attribute Values from a List Returned by BeautifulSoup's `findAll()` or `find_all()`?

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)
Nach dem Login kopieren

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:

  1. 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.

  2. 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']
    Nach dem Login kopieren
  3. 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']
    Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage