Tester si les enfants balise existe dans beautifulsoup
j'ai un fichier XML avec une structure définie, mais un nombre différent de balises, comme
file1.xml:
<document>
<subDoc>
<id>1</id>
<myId>1</myId>
</subDoc>
</document>
file2.xml:
<document>
<subDoc>
<id>2</id>
</subDoc>
</document>
Maintenant, je voudrais vérifier, si la balise myId
sorties. J'ai donc fait la suivante:
data = open("file1.xml",'r').read()
xml = BeautifulSoup(data)
hasAttrBs = xml.document.subdoc.has_attr('myID')
hasAttrPy = hasattr(xml.document.subdoc,'myID')
hasType = type(xml.document.subdoc.myid)
Le résultat est pour
file1.xml:
hasAttrBs -> False
hasAttrPy -> True
hasType -> <class 'bs4.element.Tag'>
file2.xml:
hasAttrBs -> False
hasAttrPy -> True
hasType -> <type 'NoneType'>
Bon, <myId>
n'est pas un attribut de <subdoc>
.
Mais comment je peux tester si une sous-balise existe?
//Edit: En passant: je n'aime pas vraiment l'itération par l'ensemble de la subdoc, parce que ce sera très lent. J'espère trouver un chemin où je peux l'adresse directe/demander à cet élément.
OriginalL'auteur The Bndr | 2015-10-20
Vous devez vous connecter pour publier un commentaire.
Si vous ne connaissez pas la structure du XML, doc, vous pouvez utiliser le
.find()
méthode de la soupe. Quelque chose comme ceci:Si vous connaissez la structure, vous pouvez obtenir l'élément souhaité en accédant au nom de balise comme un attribut comme ce
xml.document.subdoc.myid
. Donc, le tout serait quelque chose comme ceci:Imprime
find()
recherches à travers le document, droit? Mais, je connais la position de la balise aperçu de l'arborescence xml (si elle existe). Donc, il y a pas de moyen facile de s'attaquer directement à un élément ou à vérifier si cet élément existe?Oh d'accord, je suis désolé j'ai mal compris la première fois. J'ai mis à jour ma réponse.
Oh, je vois.... "Keep it simple" est parfois le meilleur moyen. Merci de m'ouvrir les yeux...
OriginalL'auteur wpercy
OriginalL'auteur ahuigo
vous pouvez le manipuler comme ceci:
OriginalL'auteur chyoo CHENG
Voici un exemple pour vérifier si la balise h2 existe dans un Instagram URL. J'espère que vous trouverez utile:
dans bs4 balises, il faut utiliser
has_attr(key)
au lieu de cela, commealt_image_text = [tag["alt"] for tag in images if tag.has_attr("alt")]
. Noter que tag.src semble toujours Aucun retour.OriginalL'auteur Mona Jalal