所以我试图用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
我已经在这段代码上花了好几个小时,但在这里找不到符合我要求的任何答案。任何帮助将不胜感激。
答案 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')