我通过使用漂亮的汤库从网页获取链接a.get('href')
。在链接中有一个奇怪的字符®
,但当我得到它时®
。如何正确编码?我已经在页面开头添加了# -*- coding: utf-8 -*-
r = requests.get(url)
soup = BeautifulSoup(r.text)
我通过使用漂亮的汤库从网页获取链接a.get('href')
。在链接中有一个奇怪的字符®
,但当我得到它时®
。如何正确编码?我已经在页面开头添加了# -*- coding: utf-8 -*-
r = requests.get(url)
soup = BeautifulSoup(r.text)
不要使用;_ r.text
将解码留给BeautifulSoup
:
soup = BeautifulSoup(r.content)
r.content
以字节为单位为您提供响应,无需解码。r.text
另一方面,响应被解码为unicode
.
发生的情况是服务器没有在响应标头中包含字符集。那时,requests
请遵循HTTP RFC 2261,第 3.7.1 节:默认情况下text/
,响应应使用 ISO-8859-1(拉丁语 1)字符集。
对于您的 HTML 页面,该默认设置是错误的,并且您得到了不正确的结果;r.text
将字节解码为 Latin-1,生成Mojibake:
>>> print u'®'.encode('utf8').decode('latin1')
®
HTML 本身可以在 HTML 页面本身中包含正确的编码,以 HTML 标头中的<meta>
标记的形式。BeautifulSoup 将使用该标头并为您解码字节。
即使<meta>
缺少标头标签,BeautifulSoup 也包含其他自动检测编码的方法。