본문 바로가기
엔지니어링

[Python] requests text 와 content 차이

by 당나귀🐴 2022. 12. 28.
Python 에서 크롤링을 진행할 때는 requests 라는 라이브러리를 줄곳 이용하곤 한다. http API 가 표현해야하는 url, param, header 등 관련 속성을 다양하게 표현할 수 있기 때문에 편리하다.
HTML 언어로 작성되어 있는 웹 페이지 혹은 API 의 결과값을 받을 때 requests 객체 안에 textcontent 를 사용합니다. 두 반환 값을 언제 다르게 사용하는지 궁금하여 찾아보았습니다.

 

https://requests.readthedocs.io/en/latest/user/quickstart/#response-content

text : 문자열 인코딩이 적용된 문자열이다. 이는 http 헤더를 기반으로 응답한 객체의 인코딩 정보를 추측(guesses)해서 인코딩합니다. 

- requests 객체가 요청하고, 반환받은 객체에 포함된 requests.encoding 을 이용해서 데이터를 문자열로 인코딩합니다.

 

content : 바이너리 응답 객체(Binary Response Content) 입니다. 인코딩이 진행되지 않은 바이너리 객체로 반환받습니다. Python 의 'b' 가 표현된 것처럼 바이너리 객체는 텍스트지만 인코딩이 진행되지 않은 상태를 말합니다.  

b'[{"repository":{"open_issues":0,"url":"https://github.com/...

 

이 두 개의 차이를 찾게된건 response.text 로 값을 사용하는 경우 \8x 등 추측된 인코딩으로 올바른 문자열을 반환하지 못하는 상황이 있습니다. 이럴 땐 response.content 로 바이너리 텍스트를 가져온 다음 적합한 문자열 인코딩을 진행하면 원하는 결과 값을 받아볼 수 있을 것입니다.

 

cf. 소켓에서 전달받는 바이너리 자체를 받고싶을 떄는 response.raw 를 사용합니다.