python - 不能编码'windows-1255'页面

时间:2018-04-11 14:57:43

标签: python web-scraping character-encoding beautifulsoup

我正在使用BeautifulSoup并试图读取一个用希伯来语编写并在Windows-1255中编码的网站:

<meta http-EQUIV="Content-Type" Content="text/html; charset=windows-1255">

当我尝试编码时,我收到以下错误:

> UnicodeEncodeError: 'charmap' codec can't encode characters in position 6949-6950: character maps to <undefined>

代码:

from bs4 import BeautifulSoup
import requests

r = requests.get('http://www.plonter.co.il')
soup = BeautifulSoup(r.text)
print soup.prettify().encode('windows-1255') 

1 个答案:

答案 0 :(得分:2)

如果网站已经在windows-1255中进行了编码,则应对其进行解码以获取unicode,或者只使用当前编码。

- 编辑 我不知道r.text已经被解码了。

>>> import requests
>>> r = requests.get('http://www.plonter.co.il')
>>> isinstance(r.text, unicode)
True
>>> isinstance(r.content, unicode)
False
>>> isinstance(r.content, str)
True
>>> r.encoding
'ISO-8859-1'
>>> r.content.decode(r.encoding).encode('utf-8')  # works
>>> r.content.decode(r.encoding).encode('windows-1255') # fails
>>> r.content.decode(r.encoding).encode('windows-1255', 'ignore'). # works
>>> r.content.decode(r.encoding).encode('windows-1252') # works

所以,我认为你的编码“错误”。 'windows-1255'无法处理内容编码而没有错误。另一方面'utf-8','iso-8859-1'和'windows-1252'似乎能够处理它。

>>> r.content.decode(r.encoding) == r.text
True