代码:
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
c = urlopen(req).read()
soup=BeautifulSoup(c)
我收到了警告:
警告:root:某些字符无法解码,并被替换为REPLACEMENT CHARACTER。
我尝试了.decode('utf-8')
,但它给了:
UnicodeDecodeError:'utf-8'编解码器无法解码位置421中的字节0xe7:无效的连续字节
如何捕获此警告,因此它不会显示在Python IDLE shell中?
在代码中使用warnings.simplefilter("ignore")
时:
def getimage(url,source):
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
c = urlopen(req).read()
soup=BeautifulSoup(c)
m = soup.find('div',{'rel' : 'image_src'})
return m['href']
with warnings.catch_warnings():
warnings.simplefilter("ignore")
getimage(url,source)
我明白了:
NameError:名称'url'未定义
我从另一个Python文件调用函数'getimage'。
答案 0 :(得分:1)
我得到了这个警告,然后通过了它:
FromRaw = lambda r: r if isinstance(r, unicode) else r.decode('utf-8', 'ignore')
也就是说,在汤解析之前将原始HTML传递给它:
c = urlopen(req).read()
c = FromRaw(c)
soup=BeautifulSoup(c)
在任何情况下都可以对UnicodeEncodeError
或UnicodeDecodeError
进行防弹python。以上是其中的一半。
答案 1 :(得分:0)
我相信你会找到一个关于这个确切主题here的相当全面的指南,解释警告的类型以及如何处理它们;一种类型具体为Unicode Warning
。我希望这有帮助!
快乐的编码。