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
Libérer: 2024-12-08 02:40:12
original
384 Les gens l'ont consulté

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

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

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal