Возникли проблемы при чтении текстового файла HTML в BeautifulSoup4 - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь прочитать сохраненную копию коронавируса Worldometer html на страницах BeautifulSoup4 и python3 (Anaconda Jupyter Notebook). Вот мой код:

from bs4 import BeautifulSoup

with open(r"c:\data\test.html") as fp:
   soup = BeautifulSoup(fp.read(), "html.parser")

Когда я выполняю это, я получаю следующую ошибку:

---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-3-cd472fc11bf6> in <module>
      3 
      4 with open(r"c:\data\test.html") as fp:
----> 5     soup = BeautifulSoup(fp.read(), "html.parser")

~\Anaconda3\lib\encodings\cp1252.py in decode(self, input, final)
      21 class IncrementalDecoder(codecs.IncrementalDecoder):
      22     def decode(self, input, final=False):
---> 23         return codecs.charmap_decode(input,self.errors,decoding_table)[0]
     24 
     25 class StreamWriter(Codec,codecs.StreamWriter):

UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 797676: character maps to 
<undefined>

Когда я читаю этот файл напрямую через http в BS4, он работает нормально. Но если я продолжу получать доступ к странице таким образом, я буду заблокирован. Я могу успешно получать доступ к странице каждые 10 минут напрямую через Chrome и сохраняю их в течение последней недели. Теперь мне нужно прочитать их, чтобы начать обработку данных. Не уверен, почему я вижу эту ошибку. Ценю любую помощь.

1 Ответ

0 голосов
/ 24 марта 2020

Это связано с неизвестным символом для текущей кодировки, например "á" "ó" или так далее. Вы должны указать python, чтобы прочитать это с правильным декодированием:

with open(file, encoding='utf8') as fp:
    soup = BeautifulSoup(fp, "html.parser")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...