파이썬 강의/requests

파이썬 requests 4. JSON

마리사라 2023. 1. 4. 10:17
반응형

파이썬 requests 4번째 강의는 Json입니다.

 


0. 기초 설명

JSON은 JavaScript Object Notation의 약자로 속성과 값의 쌍 또는 키와 값의 쌍으로 이루어진 데이터 오브젝트입니다. JSON은 현재 인터넷상에서 데이터를 주고받을 때 자료를 표현하는 표준 포맷이며 대부분의 언어에서 사용 중입니다. 그리고 이러한 방식으로 데이터를 주고받는 것으로 RESTful API가 있습니다.

 

RESTful API는 AWS에서는 다음과 같이 설명하고 있습니다.

 

 

예를들어 어떤 회사에서 오늘의 식단을 알려주는 서버가 있다고 가정하겠습니다. 만약 이 회사가 RESTful API를 사용하지 않는다면 식단을 알기 위해 통신하는 일련의 과정을 모두 개발해야 하며 이를 전달받는 클라이언트도 만들어야 할 것입니다. 하지만 RESTful API를 사용한다면 간단하게 데이터를 전달할 수 있습니다.


1. 실전 코드

우선 requests에서 JSON을 사용하기 위해서는 데이터를 JSON 타입으로 전달하는 사이트가 있어야 합니다. 네이버나 구글과 같은 사이트는 모든 데이터를 HTML로 전달하기 때문에 JSON을 사용할 수는 없습니다.

 

이번에는 JSON을 쉽게 사용해볼 수 있도록 도와주는 사이트인 jsonplaceholder라는 사이트를 사용해 보겠습니다.

https://jsonplaceholder.typicode.com/

 

JSONPlaceholder - Free Fake REST API

{JSON} Placeholder Free fake API for testing and prototyping. Powered by JSON Server + LowDB. Tested with XV. As of Oct 2022, serving ~1.7 billion requests each month.

jsonplaceholder.typicode.com

 

해당 사이트에서 쭉 내려가다 보면 아래와 같은 부분이 있습니다.

여기서 마음에 드는 리소스를 클릭하면 해당 리소스를 API 질의한 내용이 나타납니다. 저는 데이터가 가장 적은 users로 하겠습니다.

url = "https://jsonplaceholder.typicode.com/users"

 

이제 기본 requests를 사용하는 것처럼 코드를 입력합니다.

req = requests.get(url=url)

 

이제 이것을 JSON 데이터로 변환합니다. 변환 방법은 다음과 같습니다.

json_data = req.json()

 

마지막으로 이것을 한 줄씩 출력해 보겠습니다.

총 10개의 데이터를 JSON처럼 읽어 왔습니다.

 

이제 이것을 사용해야 합니다. 파이썬에서 JSON을 다루는 json 모듈이 있긴 하지만 기본적으로 JSON은 파이썬에서 딕셔너리 타입과 같습니다.

for i in json_data: print(type(i))

 

따라서 딕셔너리를 사용하듯이 사용할 수 있습니다. 예를 들어 username이 Samantha라는 유저를 찾고 싶다면 다음과 같이 사용할 수 있을 것입니다.

for i in json_data:
    if i["username"] == "Samantha":
        print(i)

 

이처럼 JSON 타입으로 된 데이터라면 이전에 배웠던 BeautifulSoup의 find나 select를 사용하지 않고도 데이터를 찾을 수 있습니다.


2. 마치며

API를 지원하는 사이트의 데이터를 다룰 때에는 json으로 변환하여 처리하는 것이 BeautifulSoup보다 효율적인 것을 알아두면 유용하게 사용할 수 있을 것입니다.

import requests

url = "https://jsonplaceholder.typicode.com/users"
req = requests.get(url=url)
json_data = req.json()
for i in json_data:
    if i["username"] == "Samantha":
        print(i)
반응형