UnicodeEncodeError греческая буква проблема с кодировкой
С Python начал знакомство недавно. Никак не могу решить проблему. Пытаюсь парсить сайт при помощи selenium. Страницу скачал, записал в файл. Файл в браузере открывается нормально. Хочу забрать список заголовков. Все забираются нормально, кроме одного, который содержит греческую букву бетта. При попытке вывести этот заголовок получаю ошибку "'charmap' codec can't encode character '\u03b2' in position 13: character maps to ". Вроде и кодировку 'utf-8' прописал, а всё равно не работает. Файл страницы также записывал с использованием 'utf-8'
Полный текст ошибки
Traceback (most recent call last): File "D:\scrap\test1.py", line 18, in <module>
print(aaa.text)
File "C:\Users\serge\AppData\Local\Programs\Python\Python310\lib\encodings\cp1251.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u03b2' in position 13: character maps to <undefined>
with open("index.html", 'w', encoding='utf-8') as file:
file.write(driver.page_source)
, и в браузере он открывается нормально с написанием буквы 'бетта' как 'β'
with open("index.html", 'r', encoding='utf-8') as file:
src = file.read()
soup = BeautifulSoup(src, 'lxml')
research = soup.find_all(class_="analyzes__row")
for res in research:
res1 = res.find_all('a')
for aaa in res1:
try:
print(aaa.text)
except Exception as ex:
print(ex)
continue
Ответы (1 шт):
Первое, что стоит попробовать сделать - в настройках консоли включить юникодный шрифт (обычно можно выбрать Lucida Console, Consolas и другие). Если не помогло, смотрите другие пункты.
Если это единичный случай (другие юникодные символы не встречаются), то можно просто через
replaceзаменить именно этот символ на что-то другое, пример:text = aaa.text.replace("\u03b2", "бета") print(text)Можно результат парсинга писать в файл в кодировке utf-8, потом просматривать текстовым редактором с поддержкой этой кодировки.
Можно пробовать закодировать текст кодировкой cp1251 с параметром
errors="backslashreplace", потом декодировать той же кодировкой, тогда все юникодные символы, которые не удалось закодировать, преобразуются в вид"\\u03b2":text = "Тестβ" text = text.encode("cp1251", errors="backslashreplace").decode("cp1251") print(text) # Тест\u03b2Можно использовать не "backslashreplace", а "namereplace", тогда символ заменится на его имя, для беты это будет
\N{GREEK SMALL LETTER BETA}