본문 바로가기
프로그래밍/Python

[Python] Json, Request

by 호찌민 2021. 1. 14.

피파온라인4 데이터 분석 프로젝트를 실시하기 위해서는 넥슨 개발자 센터의 API를 호출하여 데이터로 만들 수 있어야한다. 이 과정에서 Json, Request 모듈을 사용했고 패키지들의 정의 및 사용법을 정리하기 위해 작성한 글이다.

 

[JSON 정의]

더보기

JSON(제이슨[1], JavaScript Object Notation)은 속성-값 쌍( attribute–value pairs and array data types (or any other serializable value)) 또는 "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다. 비동기 브라우저/서버 통신 (AJAX)을 위해, 넓게는 XML(AJAX가 사용)을 대체하는 주요 데이터 포맷이다. 특히, 인터넷에서 자료를 주고 받을 때 그 자료를 표현하는 방법으로 알려져 있다. 자료의 종류에 큰 제한은 없으며, 특히 컴퓨터 프로그램 변수값을 표현하는 데 적합하다.

출처 : 위키백과

[자료형과 문법]

JSON의 기본 자료형은 다음과 같다.

  • 수(Number)
  • 문자열(String): 0개 이상의 유니코드 문자들의 연속. 문자열은 큰 따옴표(")로 구분하며 역슬래시 이스케이프 문법을 지원한다.
  • 참/거짓(Boolean): true 또는 false 
  • 배열(Array): 0 이상의 임의의 종류의 값으로 이루어진 순서가 있는 리스트. 대괄호로 나타내며 요소는 쉼표로 구분한다. (순서의 의미가 존재)
  • 객체(Object): 순서가 없는 이름/값 쌍의 집합으로, 이름(키)이 문자열이다. 중괄호를 사용한다. (순서의 의미가 존재하지 않음)
  • null: 빈 값으로, null을 사용한다.

[Python을 활용한 예제]

- json 패키지 로드 및 간단한 예제를 통한 인코딩

import json

kgu_student = {
'id' : 2015111114,
'name' : '황호진',
'major' : 'Applied Statistics',
'history' : [{'date' : '2015-03-32', 'status' : 'admission'},
             {'date' : '2021-02-19', 'status' : 'graduated'}]
}

# JSON 인코딩
json_student = json.dumps(kgu_student)

# 출력
print(json_student)
print(type(json_student)) # class 'str'

- dumps 내의 indent 메서드를 활용한 들여쓰기를 통해 편하게 볼 수 있다. 

# dumps 내의 indent 메서드를 활용한 들여쓰기
json_student = json.dumps(kgu_student, indent=2)
print(json_student)
더보기

{
  "id": 2015111114,
  "name": "\ud669\ud638\uc9c4",
  "major": "Applied Statistics",
  "history": [
    {
      "date": "2015-03-32",
      "status": "admission"
    },
    {
      "date": "2021-02-19",
      "status": "graduated"
    }
  ]
}

- json 디코딩 (디코딩 : JSON 문자열을 Python 타입으로 변경하는 것)

 

# JSON 디코딩
dict = json.loads(json_student)
 
# Dictionary 데이터 확인
print(dict['name'])
for h in dict['history']:
    print(h['date'], h['status'])
더보기

print(dict['name'])
황호진

for h in dict['history']:
    print(h['date'], h['status'])
2015-03-32 admission
2021-02-19 graduated

 

[Request]

- Python에서 HTTP 요청을 보내는 모듈

 

HTTP 요청은 get, post 두 가지 메서드를 활용해 할 수 있다.

r = requests.get('https://api.github.com/events')
r = requests.post('https://httpbin.org/post', data = {'key':'value'})

그 외에도 HTTP를 다루는 다양한 메서드들이 존재한다.

>>> 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')

딕셔너리 형태의 값을 정의함으로써, URL의 Question mark 뒤에 값을 지정해줄 수 있다.

e.g. httpbin.org/get?key=val

>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)

>>> print(r.url)
https://httpbin.org/get?key2=value2&key1=value1 # ? 뒤에 지정해준 key와 value 값이 입력된다 !

>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
>>> r = requests.get('https://httpbin.org/get', params=payload)

>>> print(r.url)
https://httpbin.org/get?key1=value1&key2=value2&key2=value3 # 리스트 형태로도 값을 넣어줄 수 있다.

 

request 메서드

  • text : HTML 페이지 내 text를 알려준다.
  • encoding : 해당 페이지의 인코딩 형태를 알 수 있다. (codecs를 활용해 새로운 형태의 인코딩도 가능)
  • content : 해당 페이지의 내용 확인
  • headers : Python의 dictionary 형태로 해당 페이지의 header를 보여준다. (headers의 Key를 활용해 값 확인가능)

 

Request, JSON에 대해 알아보고 Python으로 활용할 수 있는 방법까지 알아봤다.

다시 피파온라인4 데이터 분석 프로젝트를 해야겠다 !

 

 

 

관련글

'프로그래밍 > Python' 카테고리의 다른 글

[Python] Optuna 사용법  (0) 2021.07.07
Plotly 사용법  (0) 2021.07.05
[Python] Matplotlib 그림의 제목 조절 방법  (0) 2021.02.03