lxml.programme etree, élément.le texte ne retourne pas l'intégralité du texte de l'élément
J'ai mis au rebut html via xpath, que j'ai ensuite converti en un programme etree. Quelque chose de semblable à ceci:
<td> text1 <a> link </a> text2 </td>
mais quand je l'appelle élément.texte, je ne reçois texte1 (Il doit être là, quand je vérifie ma requête dans FireBug, le texte des éléments est mis en évidence, à la fois le texte avant et après l'embedded d'ancrage des éléments...
C'est une façon de le faire (extrait de code de mon peu de python gratter processeur). Me demande si c'est un lxml bug?
Voici l'extrait de code:
si l'élément.tag == "td": enfants = element.getchildren() if len(enfants) > 0: topic = (element.texte + enfants[0].la queue) else: topic = élément.texte print("\tTopic:\t\t%s" % sujet)
Voici l'extrait de code:
si l'élément.tag == "td": enfants = element.getchildren() if len(enfants) > 0: topic = (element.texte + enfants[0].la queue) else: topic = élément.texte print("\tTopic:\t\t%s" % sujet)
OriginalL'auteur user522034 | 2011-01-22
Vous devez vous connecter pour publier un commentaire.
Utilisation
element.xpath("string()")
oulxml.etree.tostring(element, method="text")
- voir la documentation.de l'élément.texte + enfant.queue fonctionne, mais je souhaite élément.texte travaillé la façon dont je le veux 🙂
de l'élément.xpath("chaîne de caractères()") renvoie le même résultat que *.tostring(). J'ai essayé de xpath("text()") qui ne renvoie pas le texte de l'élément d'ancrage, mais il renvoie une liste de 2 cordes. Merci de remarquer certaines choses.
OriginalL'auteur
Comme un service public à des personnes qui peuvent être aussi paresseux que je suis. Voici un code à partir de ci-dessus que vous pouvez exécuter.
De sortie est:
OriginalL'auteur
ressemble à un lxml bug pour moi, mais selon la conception si vous lisez la documentation. Je l'ai résolu comme ceci:
Merci pour cette remarque. Je suppose que c'est utile, mais à mon humble avis, il serait beaucoup plus clair si
.text
serait juste de retour de l'intégralité du texte et de quelques autres bien nommé le bien ne contenir que la partie jusqu'à la première sous-élément. Que diriez -node.head
. Cela donne aussi une idée de ce que ce que vous voulez suivant estchild.tail
sans avoir à stackoverflow premier.OriginalL'auteur
Une autre chose qui semble bien fonctionner pour obtenir le texte d'un élément est
"".join(element.itertext())
OriginalL'auteur
OriginalL'auteur
Voici comment il est (en ignorant les espaces):
Si vous ne voulez pas un texte qui est à l'intérieur des éléments d'enfant, alors vous pourriez recueillir que leurs queues:
OriginalL'auteur
Si le
element
est égal à<td>
. Vous pouvez effectuer les opérations suivantes.Il vous donnera une liste de tous les éléments de texte à partir de
self
(la signification de la dot).//
signifie qu'il va prendre tous les éléments et enfintext()
est la fonction d'extraire le texte.OriginalL'auteur
OriginalL'auteur