【发布时间】:2023-03-16 23:04:01
【问题描述】:
以下代码:
from bs4 import BeautifulSoup as soup
from urllib.request import urlopen as uReq
uClient = uReq('http://www.google.com')
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html.decode('utf-8', 'ignore'), 'lxml')
print(page_soup.find_all('p'))
...产生以下错误:
C:\>python ws1.py
Traceback (most recent call last):
File "ws1.py", line 10, in <module>
print(page_soup.find_all('p'))
File "C:\Python34\lib\encodings\cp437.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\xa9' in position 40
: character maps to <undefined>
我已经徒劳地寻找解决方案,因为我读过的每篇文章都建议使用特定的编码,但没有一个能解决问题。
任何帮助将不胜感激。
谢谢。
【问题讨论】:
-
问题是
page_soup.find()正在返回一个无法在您的控制台中打印的字符。 -
您是否知道一种可以促进这一点的编码,或者我可以要求(双关语)忽略违规字符?
-
我刚刚对我的答案进行了编辑,我最初包含了一个根本不需要的功能。新的答案也更加完整。
-
您是否将 Windows 机器上的 PYTHONIOENCODING 环境变量设置为 utf-8?并在脚本的第一行声明 #coding: utf-8 ?如果您被允许,您还可以通过请求提取数据。在 py3 中,response.content 返回字节,因此您也可以在那里声明 (utf_response = response.content.decode('utf-8')。这些东西每次都能解决我的问题。.
-
@jlaur 这被称为黑暗中的一枪。
#coding: utf8声明源编码,与使用的库无关。PYTHONIOENCODING=utf8通常在 Linux 上运行,并且可能在带有chcp 65001在控制台中或重定向到文件时在 Windows 上运行,否则会导致打印垃圾。
标签: python python-3.x unicode web-scraping beautifulsoup