我试图抓取一个网站,但它给了我一个错误。
我正在使用以下代码:
import urllib.request
from bs4 import BeautifulSoup
get = urllib.request.urlopen("https://www.website.com/")
html = get.read()
soup = BeautifulSoup(html)
print(soup)
我得到以下错误:
File "C:\Python34\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 70924-70950: character maps to <undefined>
我该怎么补救呢?
我得到了相同的UnicodeEncodeError时,保存抓取的网页内容到一个文件。为了修复它,我替换了以下代码:
with open(fname, "w") as f:
f.write(html)
用这个:
with open(fname, "w", encoding="utf-8") as f:
f.write(html)
如果你需要支持Python 2,那么使用这个:
import io
with io.open(fname, "w", encoding="utf-8") as f:
f.write(html)
如果您想使用与UTF-8不同的编码,请指定用于编码的实际编码。
set PYTHONIOENCODING=utf-8
set PYTHONLEGACYWINDOWSSTDIO=utf-8
您可能需要也可能不需要设置第二个环境变量PYTHONLEGACYWINDOWSSTDIO。
或者,这可以在代码中完成(尽管似乎建议通过env vars来完成):
sys.stdin.reconfigure(encoding='utf-8')
sys.stdout.reconfigure(encoding='utf-8')
另外:重现这个错误有点麻烦,所以把这个也留在这里,以防你需要在你的机器上重现它:
set PYTHONIOENCODING=windows-1252
set PYTHONLEGACYWINDOWSSTDIO=windows-1252