1

大家好,我正在尝试使用 libxml for python 从网页中提取“META”描述。当它遇到 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のメッセージまた...
4

3 回答 3

1

这有帮助吗?

xmldoc = fromstring(page.decode('utf-8'))
于 2010-06-21T23:04:45.187 回答
0

问题很可能是您的控制台不支持显示 Unicode 字符。尝试将输出通过管道传输到文件,然后以可以显示 Unicode 的方式打开它。

于 2010-06-21T22:38:25.277 回答
0

在 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')
于 2013-11-28T10:28:03.583 回答