Maison >développement back-end >Tutoriel Python >Comment accéder correctement aux valeurs d'attribut d'une liste renvoyée par « findAll() » ou « find_all() » de BeautifulSoup ?
Accès aux valeurs d'attribut avec BeautifulSoup
Lorsque vous essayez d'extraire l'attribut de valeur d'une balise d'entrée spécifique à l'aide de BeautifulSoup et du code suivant :
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)
une erreur se produit : TypeError : les indices de liste doivent être des entiers, pas str.
La documentation de BeautifulSoup suggère que les chaînes ne devraient pas poser de problème dans de tels scénarios. Cependant, l'erreur semble indiquer le contraire.
Solution
Le problème réside dans l'utilisation de .findAll(), qui renvoie une liste de tous les éléments trouvés. Pour accéder à l'attribut value d'une balise spécifique, il faut utiliser l'approche suivante :
Utilisez .find_all() au lieu de .findAll() :
.find_all() renvoie une liste de tous les éléments trouvés, tandis que .find_all() renvoie un seul (premier) élément trouvé element.
Accéder à l'attribut value du premier élément de la liste :
Puisque BeautifulSoup renvoie une liste d'éléments trouvés, il est nécessaire pour spécifier l'index de l'élément auquel vous souhaitez accéder. Dans ce cas, l'attribut value du premier élément de la liste est accessible par :
output = inputTag[0]['value']
Vous pouvez également utiliser .find() pour obtenir le premier élément :
Au lieu d'utiliser .find_all(), .find() peut être utilisé pour obtenir directement le premier trouvé élément :
inputTag = soup.find(attrs={"name": "stainfo"}) output = inputTag['value']
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!