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 ?

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 ?

Linda Hamilton
Libérer: 2024-12-24 17:27:14
original
474 Les gens l'ont consulté

How to Resolve TypeError: list indices must be integers, not str, When Extracting Attribute Values with 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)
Copier après la connexion

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']
Copier après la connexion

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']
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal