Я пытаюсь прочитать большой набор файлов .htm
с помощью Python. Для этого я использую следующее:
HtmlFile = codecs.open(file, 'r')
text = BeautifulSoup(HtmlFile.read()).text
Однако это приводит к следующей ошибке:
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 411:
character maps to <undefined>
Итак, я попробовал кодировать с помощью utf-8
вот так:
HtmlFile = codecs.open(file, 'r', encoding='utf-8')
text = BeautifulSoup(HtmlFile.read()).text
А потом я получил такую ошибку:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 4565:
invalid start byte
Я пробовал следовать совету здесь, но это не помогло. Любая помощь будет принята с благодарностью!
Думал, поможет. Я все еще получаю ошибки с помощью только open ()
Что делать, если вы делаете text = BeautifulSoup(HtmlFile).text
?
К сожалению, это не помогает. Я включил ссылку Google Диска на образец файла выше.
Я провел небольшое исследование, и это проблема с файлом, созданным Microsoft с использованием кодировки CP1252, однако есть некоторые вещи, которые не распознаются правильно. Учитывая следующее:
<meta http-equiv=Content-Type content = "text/html; charset=windows-1252">
<meta name=Generator content = "Microsoft Word 15 (filtered)">
в вашем html-файле это кажется более чем вероятным.
Согласно этому отвечать, если вы используете кодировку Latin-1 для этого примера, это может помочь:
HtmlFile = codecs.open(file, 'r', encoding='latin-1')
text = BeautifulSoup(HtmlFile.read()).text
Сообщите мне, если это сработает. Помните, что Latin-1 не содержит всех символов, которые есть в кодировках Microsoft.
Большое спасибо! Кажется, это решило проблему для меня. Я абсолютно ненавижу ошибки кодирования. Не уверен, почему они так кодировали свои файлы.
Ага, они утомительны как. Это может сработать в этом случае, но если вы загружаете кучу веб-сайтов, вам может потребоваться проверить кодировку и обработать ее соответствующим образом. Удачи!
Почему вы используете
codecs.open()
вместо обычногоopen()
?