Проблемы с кодировкой при чтении файлов .htm с помощью Python

Я пытаюсь прочитать большой набор файлов .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

Я пробовал следовать совету здесь, но это не помогло. Любая помощь будет принята с благодарностью!

Почему вы используете codecs.open() вместо обычного open()?

John Gordon 18.12.2018 01:03

Думал, поможет. Я все еще получаю ошибки с помощью только open ()

Stephen Strosko 18.12.2018 01:05

Что делать, если вы делаете text = BeautifulSoup(HtmlFile).text?

alecxe 18.12.2018 01:09

К сожалению, это не помогает. Я включил ссылку Google Диска на образец файла выше.

Stephen Strosko 18.12.2018 01:12
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
4
911
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я провел небольшое исследование, и это проблема с файлом, созданным 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.

Большое спасибо! Кажется, это решило проблему для меня. Я абсолютно ненавижу ошибки кодирования. Не уверен, почему они так кодировали свои файлы.

Stephen Strosko 18.12.2018 01:23

Ага, они утомительны как. Это может сработать в этом случае, но если вы загружаете кучу веб-сайтов, вам может потребоваться проверить кодировку и обработать ее соответствующим образом. Удачи!

AER 18.12.2018 01:24

Другие вопросы по теме