파이썬/python 문법 & 이론 실습
urllib 패키지, requests 차이
Bentist
2021. 12. 27. 11:34
파이썬 urllib, requests 차이
파이썬에서 웹 클라이언트(HTTP 요청 등)를 개발하기 위해 주로 파이썬 기본 패키지 urllib을 사용해왔다.
최근에는 사용자 친화적인 문법을 사용하여 다루기 쉽고 안정성이 뛰어난 requests 패키지를 더 많이 쓴다.
참조: https://docs.python-requests.org/en/master/user/quickstart/
기본 패키지가 아니므로, pip install을 통해 패키지 설치
pip install requests
1) 요청하기
urllib 패키지의 get 요청
import urllib.request
response = urllib.request.urlopen('https://bentist.tistory.com/')
requests 패키지의 get 요청
import requests
response = requests.get('https://bentist.tistory.com/')
위의 get 요청만 봐도 requests 패키지가 훨씬 직관적이고 사용하기 쉽게 느껴진다.
다른 HTTP 요청 메소드도 해당 메소드의 이름만 사용하면 되기 때문에 매우 직관적인 API를 제공한다.
>>> r = requests.put('https://httpbin.org/put', data = {'key':'value'})
>>> r = requests.delete('https://httpbin.org/delete')
>>> r = requests.head('https://httpbin.org/get')
>>> r = requests.options('https://httpbin.org/get')
2) 응답 상태
requests.status_code 로 확인한다.
import requests
r = requests.get('https://bentist.tistory.com')
r.status_code
>>> 200
r = requests.get('https://bentist.tistory.com/1000')
r.status_code
>>> 404
3) 응답 내용 확인
- content 속성: 디코딩하지 않은, 바이너리 형식의 데이터를 그대로 읽어온다.
r.content
content로 받아온 데이터를 이해하고 싶으면, requests 패키지가 어떤 방식의 인코딩을 하는지 알아야 한다.
r.encoding 속성을 사용하면 요청에서 사용 중인 인코딩을 확인하고 변경할 수 있다.
r.encoding
>>> 'utf-8'
r.encoding = 'euc-kr'
r.encoding
>>> 'euc-kr'
encoding 메소드로 확인한 인코딩 방식은 'utf-8'이다. 따라서 content를 'utf-8'로 직접 디코딩하여 사용할 수도 있다.
- text 속성: UTF-8로 인코딩된 코드를 문자열로 읽어온다. text는 Requests의 응답 헤더를 보고 해당 객체의 인코딩을 추측하여 해당 인코딩 방식으로 디코딩 처리하여 보여준다.
r.text
응답 헤더를 확인하기 위해 headers 메소드를 사용해보면, 'utf-8'의 인코딩 방식이 사용되었음을 알 수 있다.
- json 속성: 응답 데이터가 JSON 형식이면 딕셔너리(dictionary) 객체로 읽어온다.
r.json()
만약, 요청한 페이지의 한글이 깨져나오는 경우가 발생한다면?
해당 html 페이지의 인코딩 방식을 확인해봐야 한다.
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
charset(문자 집합)이 'euc-kr' 인코딩 방식으로 사용된 걸 확인할 수 있다.
이럴 경우, 직접 디코딩과 인코딩 방식을 지정하면 된다.
# content로 데이터를 읽어올 경우
r.content.decode('euc-kr')
# text로 데이터를 읽어올 경우
r.encoding = 'euc-kr'
r.text