UnicodeEncodeError : ‘charmap’코덱이 문자를 인코딩 할 수 없습니다 발생합니다. File “C:\Python34\lib\encodings\cp1252.py”, line

웹 사이트를 긁으려고하는데 오류가 발생합니다.

다음 코드를 사용하고 있습니다.

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>

이 문제를 해결하려면 어떻게해야합니까?



답변

UnicodeEncodeError스크랩 된 웹 컨텐츠를 파일로 저장할 때도 마찬가지 입니다. 그것을 고치기 위해이 코드를 바꿨습니다.

with open(fname, "w") as f:
    f.write(html)

이것으로 :

import io
with io.open(fname, "w", encoding="utf-8") as f:
    f.write(html)

를 사용 io하면 Python 2와 역 호환됩니다.

Python 3 만 지원해야하는 경우 open대신 내장 함수를 사용할 수 있습니다 .

with open(fname, "w", encoding="utf-8") as f:
    f.write(html)

답변

에 추가 .encode("utf-8")하여 수정했습니다 soup.

즉, print(soup)이된다 print(soup.encode("utf-8")).


답변

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 요청의 응답을 저장하는 동안 창 10의 Python 3.7에서 동일한 오류가 발생했습니다. URL에서받은 응답은 인코딩이 UTF-8이므로 인코딩을 확인하여 항상 사소한 문제를 피할 수 있도록 인코딩을 확인하는 것이 좋습니다. 실제로 생산에서 많은 시간을 죽이기 때문에

import requests
resp = requests.get('https://en.wikipedia.org/wiki/NIFTY_50')
print(resp.encoding)
with open ('NiftyList.txt', 'w') as f:
    f.write(resp.text)

open 명령으로 encoding = “utf-8″을 추가하면 올바른 응답으로 파일이 저장되었습니다.

with open ('NiftyList.txt', 'w', encoding="utf-8") as f:
    f.write(resp.text)

답변

인쇄, 읽기 / 쓰기 또는 열기를 시도 할 때 발생하는 인코딩과 동일한 문제에 직면했습니다. 위에서 언급 한 다른 사람들처럼 .encoding = “utf-8″을 추가하면 인쇄하려고하면 도움이됩니다.

soup.encode ( “utf-8”)

스크랩 된 데이터를 열려고 파일에 쓰려고하면 (……, encoding = “utf-8”)을 사용하여 파일을여십시오.

csv_file과 같이 open (filename_csv, ‘w’, newline = ”, encoding = “utf-8”)


답변

여전히이 오류가 발생하는 경우 추가 encode("utf-8")하면 soup이 문제가 해결됩니다.

soup = BeautifulSoup(html_doc, 'html.parser').encode("utf-8")
print(soup)