피파온라인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 데이터 분석 프로젝트를 해야겠다 !
관련글
'Algorithm > Python' 카테고리의 다른 글
[백준 11399번 - ATM] (0) | 2023.01.24 |
---|---|
[백준 2720번 - 세탁소 사장 동혁] (0) | 2023.01.24 |
[Python] Optuna 사용법 (0) | 2021.07.07 |
Plotly 사용법 (0) | 2021.07.05 |
[Python] Matplotlib 그림의 제목 조절 방법 (0) | 2021.02.03 |