libxml для проблемы с кодировкой utf в python или мой? - PullRequest
1 голос
/ 22 июня 2010

Привет, все, что я пытаюсь извлечь описание "META" из веб-страницы, используя libxml для Python. Когда он сталкивается с UTF-символами, кажется, он задыхается и отображает мусорные символы. Однако при получении данных через регулярные выражения я получаю символы unicode просто отлично. Я что-то не так делаю с libxml?

спасибо

''' 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

ВЫХОДЫ:

**** 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のメッセージまた...

Ответы [ 3 ]

1 голос
/ 22 июня 2010

Помогает ли это?

xmldoc = fromstring(page.decode('utf-8'))
0 голосов
/ 28 ноября 2013

В lxml вам нужно передать кодировку парсеру.Для разбора 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')
0 голосов
/ 22 июня 2010

Вполне возможно, что проблема в том, что ваша консоль не поддерживает отображение символов Unicode.Попробуйте передать вывод в файл, а затем открыть его во что-то, что может отображать Unicode.

...