A partir des éléments HTML ci-dessous, comment puis-je choisir de conserver le texte hi there!!
et de supprimer l'autre texte Cat
à l'aide du sélecteur css? En outre, en utilisant .text
ou .text.strip()
je n'obtiens pas de résultats mais quand j'utilise .text_content()
je reçois le texte.Conserver certains textes et supprimer le reste de certains éléments à l'aide du sélecteur
from lxml.html import fromstring
html="""
<div id="item_type" data-attribute="item_type" class="ms-crm-Inline" aria-describe="item_type_c">
<div>
<label for="item_type_outer" id="Type_outer">
<div class="NotVisible">Cat</div>
Hi there!!
<div class="GradientMask"></div>
</label>
</div>
</div>
"""
root = fromstring(html)
for item in root.cssselect("#Type_outer"):
print(item.text) # doesn't work
print(item.text.strip()) # doesn't work
print(item.text_content()) # working one
Résultat:
Cat
Hi there!!
Cependant, le résultat que je veux get est seulement hi there!!
et que ce que j'ai essayé est:
root.cssselect("#Type_outer:not(.NotVisible)") #it doesn't work either
Et encore une fois les questions suivantes:
- Pourquoi
.text_content()
est travail ing mais.text
ou.text.strip()
ne l'est pas? - Comment puis-je obtenir seulement
hi there!!
en utilisant css selector?
Pas moyen !!! Vous êtes si utile. Une dernière chose: pouvez-vous me dire pourquoi 'root.cssselect (" # Type_outer: not (.NotVisible) ")' il a échoué? Pardonne mon ignorance. Merci encore. – SIM
Cette expression sélectionne * élément avec l'ID "Type_outer" qui n'a pas la classe "NotVisible" *, donc dans ce cas, il retourne fondamentalement le même élément que simplement # # Type_outer' puisque le label avec cet identifiant n'a pas non plus classe "NotVisible" – har07