Programming/Python

[Python] BeautifulSoup UTF-8 설정 (Encoding, 한글 깨짐 현상)

쌍쌍바나나 2016. 4. 20. 19:26
반응형

BeautifulSoup UTF-8 설정 (Encoding, 한글 깨짐 현상)

들어가며

  저에게 진짜 파이썬을 하면서 가장 짜증날때가 언제니? 라고 하면 자신감있게 "이놈의 UTF-8 인코딩이다." 라고 말을 하고 싶을 정도로 화가 날때가 있습니다. 특히 다른언어를 접하다가 python을 접하면 가장 먼저 이해하기 어려운게 encoding인데요. 이번에도 beautifulsoup을 통해 웹페이지의 소스를 가져오는곳에서 인코딩 문제가 발생했습니다. 웹페이지의 content를 가져와서 화면에 뿌리면 평소에 보지 못한 피라미드에 적혀있을 법한 상형문자들이 보입니다. 그 애들이 무엇을 말하고 싶었는지 알기 위해서는 인코딩 설정이 필요합니다. 해결하는 방법은... 매우 간단합니다. 한줄도 아닌 1/3줄을 추가하시면 됩니다. 

문제발생

한글이 깨졌다고 표현을 해야할까, 저게 도대체 무슨 글짜인지 모르겠네요. 일단 내가 인식하지 못하는 글자들이 보입니다. 이 문제를 어떻게 해결하면 좋을까요. 

문제해결

이제는 내가 인지할 수 있는 언어인 한글로 인코딩이 되었습니다. 

구현하기

  일단 BeautifulSoup은 웹페이지의 소스를 가져오는 라이브러리가 아닌, 웹페이지의 소스를 가져와서 해당 소스를 파싱하는데 도움을 주는 라이브러리라고 생각하시면 됩니다. 기존에는 r.content를 'html.parser'를 통해 파싱을 했습니다. html 페이지를 가져왔기 때문에 html.parser를 사용했습니다. r.content는 우리가 오른쪽 마우스해서 소스보기 하면 가져오는 내용을 포함하고 있습니다. 문제가 발생할 때는 from_encoding='utf-8'을 지정하지 않았지만, 그 이후에 설정을 했을때는 아무런 문제 없이 언제 그랬냐는 듯이 한글이 보이기 시작합니다. 파이썬에서 모든 인코딩 문제는 불러올때, 파싱할때, 파일을 쓸때, 읽을 때 등에 설정을 해주는게 거의 대부분입니다. 물론 하나하나 string을 해도 되지만.. 그럼 너무 많으니까요.
# encoding 적용 전
soup = BeautifulSoup(r.content, 'html.parser')
# encoding적용 후
soup = BeautifulSoup(r.content, 'html.parser', from_encoding='utf-8')


반응형