파이썬 requests 2번째 강의는 text와 content입니다.
0. 기초 설명
여러분들이 사용하고 계신 인터넷은 모두 html(HyperText Mark-up Language)로 되어 있습니다.
보기 좋게 되어있는 네이버의 메인화면도
위처럼 수천 줄의 html 코드로 작성되어 있습니다.
크롬이나 IE같은 인터넷 브라우저들은 HTTP통신을 통해 이러한 html정보들을 서버로부터 수신받고, html 정보에 따라서 서버가 의도한 모양대로 나타내 주는 것입니다.
이것을 requests 모듈에서도 사용이 가능합니다.
requests에서는 text와 content라는 명령어가 존재합니다. 이 둘 모두 서버로부터 수신한 내용을 표시하는 코드입니다. text는 수신한 byte단위의 데이터를 자동으로 decode 하여 사용자가 보기 좋게 만들어주며, content는 수신한 byte단위의 데이터를 있는 그대로 보여줍니다.
text는 실제 사용자가 눈으로 보고 판단하기 좋으며, content는 byte단위이기 때문에 프로그램이 처리하기 좋습니다. 또한 사진이나 파일들을 전송받을 때에는 text로 정보를 읽으면 데이터가 손상될 수 있으므로, byte단위인 content로 읽어야만 합니다.
1. 실전 코드
이번에도 네이버를 기준으로 실전 코드를 알려드리겠습니다.
url = "https://www.naver.com"
query = requests.get(url=url)
이렇게 하면 query를 실행하면 네이버 메인 페이지의 정보를 읽게 됩니다.
print("query")
print(query)
print("query.text")
print(query.text)
print("query.content")
print(query.content)
이제 각각의 query를 pirnt 하게 되면 서로 다른 결과가 나타나게 됩니다.
단순한 query의 값을 print 하게 되면 저번 강의와 마찬가지로 응답 코드를 알려주게 됩니다.
query.text는 수신받은 html 정보를 적합한 문자셋으로 디코드 하여 화면에 표시하게 됩니다. 대부분은 위 사진의 <meta charset="utf-8">처럼 어떠한 문자셋으로 표현하는지에 대한 정보가 들어있습니다.
query.content는 겉으로 보기에는 무슨 말인지 알아보기 힘든 문장이 나열되어 있습니다. 하지만 가장 처음에 있는 b에서 알 수 있듯이 이 문자들은 모두 바이트 단위의 문자들입니다. 그렇기에 1바이트인 ASCII(알파벳)은 그대로 출력하지만 2바이트 문자인 한글은 저런 식으로 깨져서 나오게 됩니다.
a = b"\xeb\x84\xa4\xec\x9d\xb4\xeb\xb2\x84 \xeb\xa9\x94\xec\x9d\xb8\xec\x97\x90\xec\x84\x9c"
print(a.decode("utf-8"))
하지만 이것을 다시 디코드 하게 되면
정상적으로 text와 같은 문장이 출력됨을 볼 수 있습니다.
2. 마치며
기본적으로 requests만 쓰실 거라면 text가 더 좋을 수 있습니다. 하지만 대부분의 사람들은 requests만 쓰지 않고 BeautifulSoup라는 모듈과 같이 사용합니다. 이때 BeautifulSoup는 바이트 단위의 정보가 필요하기 때문에 content를 사용합니다.
import requests
url = "https://www.naver.com"
query = requests.get(url=url)
print("query")
print(query)
print("query.text")
print(query.text)
print("query.content")
print(query.content)
'파이썬 강의 > requests' 카테고리의 다른 글
파이썬 BeautifulSoup 1. 페이지 크롤링 (0) | 2021.01.24 |
---|---|
파이썬 BeautifulSoup 0. 파이썬으로 크롤링 하기 (0) | 2021.01.23 |
파이썬 rquests 3. header와 cookie (0) | 2021.01.14 |
파이썬 requests 1. get, post, response (1) | 2020.12.16 |
파이썬 requests 0. 파이썬으로 HTTP 통신하기 (0) | 2020.12.09 |