Я пытаюсь почистить сайт, но он выдает ошибку.
Я использую следующий код:
import urllib.request
from bs4 import BeautifulSoup
get = urllib.request.urlopen("https://www.website.com/")
html = get.read()
soup = BeautifulSoup(html)
print(soup)
И я получаю следующую ошибку:
File "C:\Python34\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 70924-70950: character maps to <undefined>
Что я могу сделать, чтобы это исправить?
python
beautifulsoup
urllib
SstrykerR
источник
источник
encoding="utf-8"
функцию openЯ исправил это, добавив
.encode("utf-8")
кsoup
.Это означает, что
print(soup)
становитсяprint(soup.encode("utf-8"))
.источник
bytes
объекта, который будет печататься как беспорядок\x
последовательностей, если есть много текста в кодировке UTF-8. Я рекомендую использоватьwin_unicode_console
, как предлагает @JFSebastian.b'\x02x\xc2\xa9'
(объект байтов) вместо этогоprint(soup.encode("utf-8"))
работал для меня, но до этого я должен был также добавитьwith open("f_name", encoding="utf-8") as f: soup = BeautifulSoup(f, "html.parser")
В Python 3.7 и под управлением Windows 10 это работало (я не уверен, будет ли оно работать на других платформах и / или в других версиях Python)
Замена этой строки:
with open('filename', 'w') as f:
С этим:
with open('filename', 'w', encoding='utf-8') as f:
Причина, по которой он работает, заключается в том, что при использовании файла кодировка изменяется на UTF-8, поэтому символы в UTF-8 могут быть преобразованы в текст, вместо того, чтобы возвращать ошибку при обнаружении символа UTF-8, который является не поддерживается текущей кодировкой.
источник
При сохранении ответа на запрос get та же ошибка была выдана на Python 3.7 в окне 10. Ответ, полученный от URL, кодировка была UTF-8, поэтому всегда рекомендуется проверять кодировку, чтобы ее можно было пропустить, чтобы избежать такой тривиальной проблемы. как это действительно убивает много времени в производстве
Когда я добавил encoding = "utf-8" с помощью команды open, он сохранил файл с правильным ответом
источник
Даже я столкнулся с той же проблемой с кодировкой, которая возникает, когда вы пытаетесь распечатать, прочитать / написать или открыть ее. Как уже упоминалось выше, добавление .encoding = "utf-8" поможет, если вы пытаетесь его распечатать.
Если вы пытаетесь открыть очищенные данные и, возможно, записать их в файл, откройте файл с помощью (......, encoding = "utf-8")
источник
Для тех, кто все еще получает эту ошибку, добавление
encode("utf-8")
кsoup
также исправит это.источник
soup
больше не являетсяBeautifulSoup
объектом после того, как вы это сделаете, поэтому им нельзя манипулировать или искать