Maison >développement back-end >Tutoriel Python >Comment résoudre TypeError : les indices de liste doivent être des entiers, pas des str, lors de l'extraction des valeurs d'attribut avec BeautifulSoup ?
Extraction de valeurs d'attribut avec BeautifulSoup : résolution de TypeError en Python
Dans une quête visant à extraire le contenu d'un seul attribut « valeur » d'un balise "input" particulière sur une page Web, vous avez décidé d'invoquer BeautifulSoup. Avec le code suivant, vous vous êtes lancé dans votre mission :
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)
Cependant, votre effort a été contrecarré par l'énigmatique TypeError : les indices de liste doivent être des entiers, pas des chaînes. Le désespoir s'est glissé alors que vous cherchiez du réconfort dans la documentation de BeautifulSoup, mais ses subtilités vous ont laissé perplexe. Permettez-nous de faire la lumière sur cette énigme.
La méthode find_all() renvoie une liste de tous les éléments correspondants. Dans votre cas, input_tag est une liste contenant probablement un seul élément. La ligne suivante, output = inputTag['value'], tente d'accéder à la valeur du dictionnaire associé au premier élément de la liste. Étant donné que l'index de la liste doit être un nombre entier, cette opération échoue avec l'erreur signalée.
Pour résoudre le problème, vous disposez de deux options :
Option 1 : Sélection du premier élément
Sélectionnez explicitement le premier élément de la liste en utilisant indexation :
input_tag = soup.find_all(attrs={"name": "stainfo"}) output = input_tag[0]['value']
Option 2 : Utilisation de la méthode find()
Utilisez la méthode find(), qui renvoie uniquement le premier élément correspondant :
input_tag = soup.find(attrs={"name": "stainfo"}) output = input_tag['value']
En mettant en œuvre l'une ou l'autre de ces approches, vous pouvez extraire efficacement la valeur d'attribut souhaitée et continuer votre voyage BeautifulSoup sans autres obstacles.
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!