Python 웹사이트 스크래핑시 인코딩 문제 해결

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

 

예제로 배우는 파이썬 프로그래밍 - 파이썬 Web Scraping

1. 파이썬 Web Scraping 웹사이트에서 HTML을 읽어와 필요한 데이타를 긁어오는 것을 Web Scraping이라 한다. 이 과정은 크게 웹페이지를 읽어오는 과정과 읽어온 HTML 문서에서 필요한 데이타를 뽑아내는

pythonstudy.xyz