繁体   English   中英

从Python中的HTML元素解析unicode字符

[英]Parse unicode characters from HTML element in Python

我有以下代码来解析HTML网站。 这将返回一个HTML元素对象。 我想在多台计算机上运行此代码,因此当有人尝试从代理后面运行代理时,实现代理对我来说很重要。

from lxml.html import parse

def parsepage(url):
if proxy:
    proxy_support = urllib2.ProxyHandler({"http":proxy})
    opener = urllib2.build_opener(proxy_support,urllib2.HTTPHandler)
    urllib2.install_opener(opener)
    conn = urllib2.urlopen(url)
    site = parse(conn).getroot()
else:
    site = parse(url).getroot()
return site

在返回HTML元素之后,我使用如下Xpath表达式从对象获取数据:

element = site.xpath(expression)

问题在于结果包含非Unicode数据,其中包含转义字符。 例如:

\\ xe1ci \\ xf3s kombi

我也尝试了这种实现,但是这给了我一个错误:

def parsepage(url):
if proxy:
    proxy_support = urllib2.ProxyHandler({"http":proxy})
    opener = urllib2.build_opener(proxy_support,urllib2.HTTPHandler)
    urllib2.install_opener(opener)
    conn = urllib2.urlopen(url)
    rawdata = conn.read()
    parser = etree.HTMLParser(encoding="utf-8")
    site = etree.HTML(rawdata, parser=parser)
else:
    site = parse(url).getroot()
return site

错误消息是:

'utf8'解码无法解码位置4的字节0xf3:无效的连续字节

该站点正在使用iso-8859-2字符集。

有没有一种方法可以使用上面列出的一种解析方法将非unicode字符转换为unicode? 或者,也许我出了点问题,并以正确的格式获取了数据,但是表示存在问题。

我应该改用lxml.fromstring并使用encoding参数吗?

谢谢,g0m3z

解:

实际上,我的代码没有问题,但数据表示没有问题。 第一个代码实现工作正常。

我将结果加载到字典中,并且一次打印整个字典时,它会错误地显示unicode字符。 但是,如果我仅根据一个键打印结果字典中的一项,则它可以正确表示Unicode字符。 这样就行了! 有趣。 感谢在此主题上的每个人的宝贵意见!

您应该从HTTP标头(或HTML-meta-tags)中读取实际的字符编码,而不要猜测。 这样可以避免解码错误。

您可以尝试使用库来解析请求。 我向您推荐BeautifulSoup。 这将解决编码的所有问题,并且非常易于使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM