Python 에서 크롤링을 진행할 때는 requests 라는 라이브러리를 줄곳 이용하곤 한다. http API 가 표현해야하는 url, param, header 등 관련 속성을 다양하게 표현할 수 있기 때문에 편리하다.
HTML 언어로 작성되어 있는 웹 페이지 혹은 API 의 결과값을 받을 때 requests 객체 안에 text 와 content 를 사용합니다. 두 반환 값을 언제 다르게 사용하는지 궁금하여 찾아보았습니다.
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 를 사용합니다.
'엔지니어링' 카테고리의 다른 글
MySQL [Stored Procedure & EVENT Scheduler] (0) | 2022.12.29 |
---|---|
AWS CloudWatch 를 통한 서버 메트릭, 로그 관리 하기 (기초) (0) | 2022.11.23 |
AWS 와 GCP 에서 Docker 기반 인스턴스의 네트워크 차이(Compute Engine / EC2 ) - 포트포워딩 (0) | 2022.11.08 |
DataFrame을 압축하는 형태({‘snappy’, ‘gzip’, ‘brotli’ ) 알아보기 - Parquet 와는 어떻게 다를까? (0) | 2022.06.06 |
같은 스키마를 가진 파일들 안에서 여러개의 Athena 테이블이 만들어질 때 (0) | 2022.05.17 |