Maison >développement back-end >Tutoriel Python >Comment éviter « TypeError : les indices de liste doivent être des entiers, pas des str » lors de l'extraction de valeurs d'attribut avec BeautifulSoup ?

Comment éviter « TypeError : les indices de liste doivent être des entiers, pas des str » lors de l'extraction de valeurs d'attribut avec BeautifulSoup ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-02 20:13:11902parcourir

How to Avoid

Extraction d'une valeur d'attribut avec BeautifulSoup

Lorsque vous tentez d'extraire la valeur d'un attribut "value" spécifique dans une balise "input" à l'aide BeautifulSoup, un message d'erreur "TypeError : les indices de liste doivent être des entiers, pas des chaînes" peut apparaître. Le problème vient d'une incompréhension du fonctionnement de la méthode .find_all() de BeautifulSoup.

Comprendre .find_all()

.find_all() recherche toutes les occurrences d'une balise qui correspondent aux attributs spécifiés et renvoie une liste d'éléments. Cela signifie que lors de l'extraction de l'attribut d'une balise d'entrée avec un nom particulier, l'opération renvoie un élément qui est membre de cette liste, et non la valeur de l'attribut elle-même.

Correction du code

Pour rectifier l'erreur, il existe deux approches :

  1. Utiliser l'indexation : Accédez à l'élément de la liste en utilisant l'indexation, où le premier L'élément est représenté par input_tag[0]. Accédez ensuite à l'attribut 'value' de cet élément, par exemple :
input_tag = soup.find_all(attrs={"name": "stainfo"})
output = input_tag[0]['value']
  1. Utilisez .find() : Au lieu de .find_all(), 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 implémentant l'une ou l'autre de ces modifications, le code extraira correctement la valeur d'attribut souhaitée, éviter l'exception "TypeError".

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!

Déclaration:
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