[英]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.