2020. 7. 14. 18:42ㆍ서버 프로그래밍
euc-kr 인코딩 웹사이트의 경우나, utf-8 인코딩 웹사이트임에서 한글이 깨지는 경우 다른 언어에서 늘 했던대로 문자열 인코딩/디코딩으로 한글 인코딩을 변경해주려고 했는데 이것이 통하지 않는다. 간만에 삽질을 하던 끝에 requests로 사이트를 읽어왔을때 아래와 같이 respons의 인코딩을 None으로 바꿔주고 텍스트를 가져오면 UTF-8로 변경된 문자열이 넘어온다. 물론 모든 사이트에 해당하는 것이 아니라 euc-kr로 인코딩되어 있거나 utf-8로 인코딩했다고 하는데 한글이 깨지는 사이트 등 일부에만 해당하는 듯.
인코딩이 유니코드 인코딩(예: UTF-8 등)이거나 한글 인코딩(예: EUC-KR)이면 일반적으로 한글이 깨지지 않지만, ISO-8859-1와 같이 영문 인코딩이면 한글이 깨지게 된다. 이를 해결하는 방법은 미리 Response 객체의 encoding 을 한글인코딩(예: EUC-KR)이나 None (인코딩 추즉을 하지 않도록) 으로 지정한 후, text 속성을 읽으면 된다. 예를 들어, 아래 예제는 네이버 증권사이트의 ISO-8859-1 인코딩 문제를 처리한 코드이다.
1 2 3 4 5 6 7 8 9 10 |
import requests
resp = requests.get('http://finance.naver.com/') resp.raise_for_status()
resp.encoding=None # None 으로 설정 #resp.encoding='euc-kr' # 한글 인코딩
html = resp.text print(html) |
http://pythonstudy.xyz/python/article/403-%ED%8C%8C%EC%9D%B4%EC%8D%AC-Web-Scraping