Кодировка BeautifulSoup (utf-8")

from bs4 import BeautifulSoup   
import urllib.request    

link = ('https://mywebsite.org')  
req = urllib.request.Request(link, headers={'User-Agent': 'Mozilla/5.0'})
url = urllib.request.urlopen(req).read()

soup =  BeautifulSoup(url, "html.parser")  
body = soup.find_all('div', {"class":"wrapper"})

print(body)

Привет, ребята, у меня проблема с этим кодом. Если я запущу его, появится ошибка

UnicodeEncodeError: кодек «charmap» не может кодировать символ «\ u2022» в позиции 138: символы сопоставляются с

Я попытался найти и обнаружил, что должен добавить

.кодировать ("utf-8")

но если я добавлю его, появится ошибка

AttributeError: объект «ResultSet» не имеет атрибута «кодировать»

Как я могу это решить?

Извините за мой английский, но я итальянец :)


person Frank    schedule 18.03.2016    source источник
comment
Не могли бы вы предоставить весь стек ошибок, а не только последнюю строку ошибки? Кроме того, где вы добавили .encode("utf-8") ? Пожалуйста, поместите код после того, как вы добавите метод encode().   -  person Sushovan Mandal    schedule 18.03.2016
comment
В будущем, пожалуйста, предоставьте полную трассировку стека (кстати, ваш английский в порядке).   -  person Alastair McCormack    schedule 18.03.2016
comment
Пожалуйста, отредактируйте свое сообщение, чтобы включить все сообщение об ошибке, включая обратную трассировку. Для дальнейшего использования прочитайте Как спросить и минимальный воспроизводимый пример, чтобы увидеть, какие вопросы вызывают полезные ответы.   -  person Robᵩ    schedule 18.03.2016


Ответы (1)


Вы работаете в Windows и пытаетесь печатать на консоли. print() выдает исключение.

Консоль Windows изначально поддерживает только 8-битные кодовые страницы, поэтому все, что находится за пределами вашего региона, сломается (несмотря на то, что люди говорят о chcp 65001).

Вам необходимо установить и использовать https://github.com/Drekin/win-unicode-console. Этот модуль взаимодействует с консольным API на низком уровне, обеспечивая поддержку многобайтовых символов.

В качестве альтернативы не печатайте на консоль и записывайте свой вывод в файл, открытый с помощью кодировки. Например:

with open("myoutput.log", "w", encoding="utf-8") as my_log:
    my_log.write(body)
person Alastair McCormack    schedule 18.03.2016