使用 Requests 和 Beautiful Soup 解析 HTML 文件时,以下行在某些网页上引发异常:
if 'var' in str(tag.string):
这是上下文:
response = requests.get(url)
soup = bs4.BeautifulSoup(response.text.encode('utf-8'))
for tag in soup.findAll('script'):
if 'var' in str(tag.string): # This is the line throwing the exception
print(tag.string)
这是一个例外:
UnicodeDecodeError:“ascii”编解码器无法解码位置 15 中的字节 0xc3:序数不在范围内(128)
我已经尝试过使用和不使用该行中的encode('utf-8')
函数BeautifulSoup
,它没有区别。我确实注意到,对于抛出异常的页面Ã
,javascript 中的注释中有一个字符,即使 response.encoding 报告的编码是ISO-8859-1
. 我确实意识到我可以使用 unicodedata.normalize 删除有问题的字符,但是我更愿意将tag
变量转换为utf-8
并保留字符。以下方法都不能帮助将变量更改为utf-8
:
tag.encode('utf-8')
tag.decode('ISO-8859-1').encode('utf-8')
tag.decode(response.encoding).encode('utf-8')
我必须对此字符串做什么才能将其转换为可用utf-8
?