如何处理无效的unicode BeautifulSoup而不转换为utf-8?

时间:2016-01-14 04:54:02

标签: python html encoding utf-8 beautifulsoup

所以我试图用python解析一个网站的HTML,并且有一个麻烦的字符u011f会出现以下错误:

Function call:   soup = BeautifulSoup(response, "html.parser")
                 print (soup)

Error: UnicodeEncodeError: 'charmap' codec can't encode character '\u011f'

如果我这样做并编码为utf-8,

soup = BeautifulSoup(response, "html.parser").encode('utf-8') 

它删除了错误,但是我不能这样做因为我稍后调用了find函数,它必须是unicode。如果在编码为utf-8后调用find函数,则会收到以下错误:

Function call:   worksTable = soup.find('tbody', attrs={'id': 'some_id'})
Error: TypeError: find() takes no keyword arguments

我已经在这段代码上花了好几个小时,但在这里找不到符合我要求的任何答案。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

当您对汤进行编码时,它变为string

以下代码行

BeautifulSoup(response, "html.parser").encode('utf-8')

将返回一个字符串对象,因此不支持应在find(tagname, attrs={})对象上使用的BeautifulSoup方法调用。

我认为你应该在制作汤之前对响应文本进行编码以获得更好的结果。

responseTxt = response.text.encode('UTF-8')
soup = BeautifulSoup(responseTxt, 'html.parser')
idv = soup.find('tbody', attrs={'id': 'some_id'})
print(idv.text)

答案 1 :(得分:0)

所以我发现我的桌面编解码器存在问题。我的笔记本电脑上的代码运行正常。我对此非常困惑,但会找到一种方法来管理。

答案 2 :(得分:0)

您可以在encode()而不是汤上尝试find(),这是一个例子:

worksTable = soup.find('tbody', attrs={'id': 'some_id'}).text.encode('utf-8')