2010-06-21 6 views
1

salut tout J'essaie d'extraire la description "META" d'une page web en utilisant libxml pour python. Quand il rencontre des caractères UTF, il semble étouffer et afficher des caractères parasites. Cependant, lorsque j'obtiens les données via une regex, j'obtiens les caractères Unicode. Est-ce que je fais quelque chose de mal avec libxml?libxml pour le problème d'encodage utf de python ou le mien?

grâce

''' test encoding issues with utf8 ''' 

from lxml.html import fromstring 
from lxml.html.clean import Cleaner 
import urllib2 
import re 

url = 'http://www.youtube.com/watch?v=LE-JN7_rxtE' 
page = urllib2.urlopen(url).read() 


xmldoc = fromstring(page) 
desc = xmldoc.xpath('/html/head/meta[@name="description"]/@content') 
meta_description = desc[0].strip() 

print "**** LIBXML TEST ****\n" 
print meta_description 


print "**** REGEX TEST ******" 
reg = re.compile(r'<meta name="description" content="(.*)">') 
for desc in reg.findall(page): 
    print desc 

SORTIES:

**** LIBXML TEST **** 

My name is Hikakin.<br>I'm Japanese Beatboxer.<br><br>HIKAKIN Official Blog<br>http://ameblo.jp/hikakin/<br><br>ãã³çã³ãã¥<br>http://com.nicovideo.jp/community/co313576<br><br>â»å¾¡ç¨ã®æ¹ã¯Youtubeã®ã¡ãã»ã¼ã¸ã¾ã... 
**** REGEX TEST ****** 
My name is Hikakin.&lt;br&gt;I'm Japanese Beatboxer.&lt;br&gt;&lt;br&gt;HIKAKIN Official Blog&lt;br&gt;http://ameblo.jp/hikakin/&lt;br&gt;&lt;br&gt;ニコ生コミュ&lt;br&gt;http://com.nicovideo.jp/community/co313576&lt;br&gt;&lt;br&gt;※御用の方はYoutubeのメッセージまた... 

Répondre

1

Est-ce que cela aide?

xmldoc = fromstring(page.decode('utf-8')) 
+1

travaillé! Merci beaucoup – James

0

Il est très possible que le problème est que votre console ne prend pas en charge l'affichage des caractères Unicode. Essayez d'acheminer la sortie vers un fichier, puis ouvrez-le dans quelque chose qui peut afficher Unicode.

0

En lxml, vous devez transmettre le codage à l'analyseur. Pour l'analyse HTML/XML:

url = 'http://en.wikipedia.org/wiki/' + wiki_word 
parser = lxml.etree.HTMLParser(encoding='utf-8') # you can either use an XMLParser() 

page = urllib2.urlopen(url) 
doc = etree.parse(page, parser) 
T = doc.xpath('//p//text()') 
text = u''.join(T).encode('utf-8')