Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- javascript
- @keyframes
- 뉴스수집
- vue-cli
- CSS로딩
- python
- css rule
- vueJS
- html제거
- 로딩UI
- 코딩규칙
- 투두리스트
- 프레임워크
- 자기개발
- 구글CSS
- MariaDB
- 구글스타일가이드
- CSS애니메이션
- css규칙
- 스타일가이드
- 자바스크립트
- 개발회고
- 코딩가이드
- vuejs입문
- Vue.js
- 웹스크래핑
- 파이썬
- 코딩컨밴션
- to do list
- google style guide
Archives
- Today
- Total
코드공부방
[웹크롤링] 웹사이트 인코딩 확인 및 디코딩하기 (python) 본문
반응형
[웹크롤링, 웹스크래핑]
웹사이트 인코딩 확인 및 디코딩하기 (python)
파이썬 urllib을 사용해 스크래핑을 할때, HTTP헤더와 HTML의 meta 태그를 기반으로 웹페이지 인코딩 방식을 판별해야 한다. 인코딩 방식을 제대로 판별하지 않으면 문자가 깨져보여 정확한 데이터를 추출할 수 없다.
먼저 urllib.request 모듈을 사용하여 네이버 웹페이지 소스를 추출해보자.
from urllib.request import urlopen
f = urlopen('https://naver.com')
f.read()
위 코드를 실행하면 아래와 같은 결과값을 얻을 수 있다.
한글이 모두 깨져서 출력이 된다. HTTPResponse.read() 메소드로 추출한 값은 bytes 자료형이므로 원하는 정보를 얻으려면 문자열로 디코딩해야 한다. 최근에는 HTML5의 기본 인코딩 방식인 UTF-8로 작성된 웹페이지가 많아 UTF-8로 지정하는 것도 좋지만, 혹시 모를 상황에 대비해야 하니 HTTP 헤더를 분석하여 적절한 인코딩 방식으로 디코딩 하는 것이 좋다.
HTTP 응답의 Content-Type 헤더를 참조하면 해당 페이지에 사용되고 있는 인코딩 방식을 알아낼 수 있는데, 보통 'text/html', 'text/html; charset=UTF-8', 'text/html; charset=EUC-KR' 과 같은 헤더를 갖고 있다. 'charset'뒤에 적혀 있는 'UTF-8', 'EUC-KR'이 해당 페이지에 사용된 인코딩 방식이다. 이 값을 추출하기 위해 정규식을 사용해도 되지만 get_content_charset() 메소드를 사용하면 더욱 간단하게 인코딩 방식을 얻어올 수 있다.
from urllib.request import urlopen
f = urlopen('https://naver.com')
# 인코딩 방식 추출(명시되어 있지 않으면 utf-8을 사용한다.)
encoding = f.info().get_content_charset(failobj='utf-8')
# 추출한 인코딩 방식으로 디코딩
text = f.read().decode(encoding)
# 출력
print(text)
반응형
Comments