Изменить кодировку для локально сохраненных файлов .html, загруженных с помощью urllib.request.urlretrieve () - PullRequest
0 голосов
/ 02 октября 2018

Я использовал следующий код Python для сохранения HTML-файла в локальном хранилище:

url = "some_url.html
urllib.request.urlretrieve(url, 'save/to/path')

Это успешно сохраняет файл с расширением .html.Когда я пытаюсь открыть файл с помощью:

html_doc = open('save/to/path/some_url.html', 'r')

, я получаю следующую ошибку:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 36255: ordinal not in range(128)

Я думаю, это означает, что я пытаюсь прочитать файл utf-8 с помощью asciiкодек.Я попытался найти решение по адресу:

Преобразовать Unicode в ASCII без ошибок в Python

Но это, как и другие найденные мной решения, похоже, работает только длякодирование файла для немедленного просмотра, а не сохраненных файлов.Я не могу найти тот, который работает для изменения кодировки локально сохраненного файла.

1 Ответ

0 голосов
/ 03 октября 2018

Функция open() имеет необязательный параметр encoding.Его значение по умолчанию зависит от платформы, но в вашем случае это, по-видимому, значение по умолчанию UTF-8.

Если вы знаете правильный кодек (например, из заголовка HTTTP), вы можете указать его:

html_doc = open('path/to/file.html', 'r', encoding='cp1252')

Если вы этого не знаете, скорее всего, это записано в файле.Вы можете открыть файл в двоичном режиме:

html_doc = open('path/to/file.html', 'rb')

, а затем попытаться найти объявление кодировки и декодировать все это в памяти.

Однако не делайте этого.Там нет особого смысла в открытии и обработке HTML, как текстовый файл.Вы должны использовать анализатор HTML, чтобы пройтись по дереву документа и извлечь все, что вам нужно.Стандартная библиотека Python имеет один , но вам может показаться, что Beautiful Soup проще в использовании.

...