웹 사이트를 긁으려고하는데 오류가 발생합니다.
다음 코드를 사용하고 있습니다.
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)