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 ?

Comment accéder correctement aux valeurs d'attribut d'une liste renvoyée par « findAll() » ou « find_all() » de BeautifulSoup ?

DDD
DDDoriginal
2024-12-08 02:40:12377parcourir

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

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 :

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

  2. 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']
  3. 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!

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