2010-09-04 4 views
2

Je suis en train de supprimer des commentaires à partir d'une liste des éléments qui ont été obtenus en utilisant lxmlComment accéder à des commentaires en utilisant lxml

Le meilleur que je suis en mesure de faire est:

no_comments=[element for element in element_list if 'HtmlComment' not in str(type(each))] 

Je me demande s'il y a un moyen plus direct? Je vais ajouter quelque chose à partir de la réponse de Matthieu - il m'a presque fait le problème est que lorsque les éléments sont pris dans l'arbre, les commentaires perdent une certaine identité (je ne sais pas comment le décrire) de sorte que il ne peut pas déterminer si ce sont des objets de classe HtmlComment en utilisant le isinstance() méthode

Cependant, cette méthode peut être utilisée lorsque les éléments sont itérés sur l'arbre

from lxml.html import HtmlComment 
no_comments=[element for element in root.iter() if not isinstance(element,HtmlComment) 

Pour les novices comme moi racine est l'élément html de base qui contient tous les autres éléments de l'arbre, il y a plusieurs façons de l'obtenir. L'un est d'ouvrir le fichier et itérer si au lieu de root.iter() dans les ci-dessus

html.fromstring(open(r'c:\temp\testlxml.htm').read()).iter() 

Répondre

1

Vous pouvez couper les cordes:

from lxml.html import HtmlComment # or similar 
no_comments=[element for element in element_list if not isinstance(element, HtmlComment)] 
+0

N'a pas travaillé ma liste toujours inclus commentaires Humm, mais il pourrait fonctionner plus tôt les éléments dans element_list, si ce sont les commentaires, ce sont les commentaires - cela a-t-il du sens? Un élément qui est un commentaire est , un élément qui n'est pas un commentaire est PyNEwbie

+0

Mais cela fonctionne ici éléments = [e for e in theTree .cssselect ('texte') [0] .iter()) sinon isinstance (e, HtmlComment)] – PyNEwbie

Questions connexes