urllib2/lxml编码问题

2024-10-05 14:32:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,尝试使用urllib2/lxml获取和解析页面。一切似乎都很好,除了被解析的页面,当我在浏览器中打开时,似乎有奇怪的字符嵌入其中。我猜这是unicode/lxml解析问题。当我使用.text_content()获取元素的文本内容并打印它时,在原始页面中会得到类似“sometext\342\200\223 moretext”的内容,显示为“sometext-moretext”

有谁能告诉我:
1发生什么事?
2我怎么修?
三。我在哪里可以读到像这样的编码问题?在

谢谢!在


Tags: text文本元素内容编码unicode浏览器页面
2条回答

现在网站使用的是一个“endash”,它是一个稍长的破折号(你应该在40-56范围内使用这个破折号,真的)。是的,破折号本身就是一门科学)。在

在Unicode中,endash具有码位U+2013。您得到的数字,\342\200\223是该码位的UTF-8编码的八进制表示。为什么你得到八进制我不知道,我得到十六进制,所以在我的电脑上它看起来像'\xe2\x80\x93'。但这没什么区别,只是回应而已。数字是一样的。在

您可能应该做的是尽早将得到的HTML字符串解码为unicode。获取页面时返回的标题应该告诉您它使用什么编码(尽管这里显然是UTF8),从页眉中提取数据相当容易,当您打印出页眉时就会看到它。在

然后解码html数据:

htmldata = htmldata.decode(<the encoding you found in the headers>)

在此过程中,您主要需要注意两个方面的unicode问题:

  1. 将响应转换为unicode字符串nicely explained here on SO
  2. 输出字符串时指定合适的编码

#  from an lxml etree
etree.tostring(root, encoding='utf-8', xml_declaration=False)

# from a unicode string
x.encode('utf-8')

相关问题 更多 >