小编典典

urllib2读为Unicode

python

我需要存储可以使用任何语言的网站内容。而且我需要能够在内容中搜索Unicode字符串。

我已经尝试过类似的东西:

import urllib2

req = urllib2.urlopen('http://lenta.ru')
content = req.read()

内容是字节流,因此我可以在其中搜索Unicode字符串。

我需要某种方式,当我这样做时urlopen,然后阅读使用标题中的字符集来解码内容并将其编码为UTF-8。


阅读 266

收藏
2021-01-20

共1个答案

小编典典

执行完操作后,您将看到:

>>> req.headers['content-type']
'text/html; charset=windows-1251'

所以:

>>> encoding=req.headers['content-type'].split('charset=')[-1]
>>> ucontent = unicode(content, encoding)

ucontent 现在是Unicode字符串(包含140655个字符),例如,如果您的终端是UTF-8,则显示它的一部分:

>>> print ucontent[76:110].encode('utf-8')
<title>Lenta.ru: Главное: </title>

并且您可以搜索等。

编辑:Unicode I /
O通常很棘手(这可能是阻止原始问询者的原因),但是我将绕过将Unicode字符串输入到交互式Python解释器(与原始问题完全无关)的难题,以显示如何,一旦正确输入了Unicode字符串(我是通过代码点来完成的-
愚蠢但并不棘手;-),搜索绝对是一件容易的事(因此,希望可以彻底解决原始问题)。再次假设使用UTF-8终端:

>>> x=u'\u0413\u043b\u0430\u0432\u043d\u043e\u0435'
>>> print x.encode('utf-8')
Главное
>>> x in ucontent
True
>>> ucontent.find(x)
93

注意 :请记住,此方法可能不适用于所有站点,因为某些站点仅在提供的文档中指定字符编码(例如,使用http-equiv元标记)。

2021-01-20