2012-06-19 3 views
3

J'utilise lxml pour analyser un fichier HTML qui a une étiquette de commentaires facebook qui ressemble à ce que:python lxml trouver <fb: commentaires /> tag

<fb:comments id="fb_comments" href="http://example.com" num_posts="5" width="600"></fb:comments> 

Je suis en train de le sélectionner pour obtenir le href valeur, mais quand je fais un cssselect('fb:comments') je reçois l'erreur suivante:

The pseudo-class Symbol(u'comments', 3) is unknown 

Est-il possible de le faire?

Edit: Le code:

from lxml.html import fromstring 
html = '...' 
parser = fromstring(html) 
parser.cssselect('fb:comments') #raises the exception 
+0

Veuillez fournir votre code python. –

+0

@Secator code ajouté – applechief

Répondre

3

La méthode cssselect() analyse le document en utilisant l'expression CSS selector donné. Dans votre cas, le caractère deux-points (:) est un séparateur de préfixe d'espace de noms XML (c'est-à-dire <namespace:tagname/>) qui est confondu avec la syntaxe de pseudo-classe CSS (c'est-à-dire tagname:pseudo-class).

Selon lxml manual vous devez utiliser la syntaxe namespace-prefix|element dans cssselect() afin de trouver une étiquette (comments) avec un préfixe d'espace de noms (fb). Donc:

from lxml.html import fromstring 
html = '...' 
parser = fromstring(html) 
parser.cssselect('fb|comments') 
+0

génial! merci, mais cela renvoie 'Undefined namespace prefix' aucune idée pourquoi? – applechief

+1

Peut-être essayer avec juste 'comments' (sans espace de noms)? –

+0

oui! ça a marché. merci :) – applechief

Questions connexes