Застрял во время чтения файлов - PullRequest
0 голосов
/ 10 мая 2019

какой код DO

Я пытаюсь прочитать каждый файл из предоставленной мною папки и извлекаю некоторую строку, используя пакет bs4 Soup в python.

Я получил ошибку при чтении файла, который не могут прочитать некоторые символы Юникода.

ошибка

Traceback (последний вызов был последним): Файл "C:----- \ check.py ", строка 25, в супе = BeautifulSoup (text.read (), 'html.parser') Файл" C: \ Python \ Python37 \ lib \ encodings \ cp1252.py ", строка23, в декодировании, возвращают codecs.charmap_decode (input, self.errors, decoding_table) [0] UnicodeDecodeError: кодек «charmap» не может декодировать байт 0x9d в позиции 3565: символ отображается на

   from bs4 import BeautifulSoup
   from termcolor import colored
   import re, os

   import requests
   path = "./brian-work/"
   freddys_library = os.listdir(path)
def getfiles():
  for r, d, f in os.walk(path):
    for file in f:
        if '.html' in file:
            files.append(os.path.join(r, file))
  return files


for book in getfiles():
    print("file is printed")
    print(book)
    text = open(book, "r")
    soup=BeautifulSoup(text.read(), 'html.parser')
    h1 = soup.select('h1')[0].text.strip()
    print(h1)
    if soup.find('h1'):
      h1 = soup.select('h1')[0].text.strip()
    else:

      print ("no h1")
      continue

    filename1=book.split("/")[-1]
    filename1=filename1.split(".")[0]
    print(h1.split(' ', 1)[0])
    print(filename1) 
    if h1.split(' ', 1)[0].lower() == filename1.split('-',1)[0] :
      print('+++++++++++++++++++++++++++++++++++++++++++++');
      print('same\n');
    else:
      print('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
      print('not')
      count=count+1

Пожалуйста, помогите, что я должен исправить здесь.

Спасибо

1 Ответ

1 голос
/ 11 мая 2019

Проблема заключается в открытии файла, не зная его кодировки.Кодировка по умолчанию для text = open(book, "r") для открытых документов - это значение, возвращаемое из locale.getpreferredencoding(False), что для вашей системы составляет cp1252.Этот файл имеет другую кодировку, поэтому он не работает.

Используйте text = open(book, "rb") (двоичный режим) и дайте BeautifulSoup разобраться с этим.HTML-файлы обычно указывают их кодировку.

Вы также можете использовать text = open(book,encoding='utf8') или любую другую правильную кодировку, если вы ее уже знаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...