API = Application Program Interface.
interface = 어느 한 곳에서 정보를 가져올 수 있도록 연결해주는 것
import json
json.dumps(dict자료) -> json이 이해할 수 있는 언어로 변환 , 이 경우 type은 str (dict자료만 받음)
ex)
python_dict = {
"이름": "홍길동",
"나이": 25,
"거주지": "서울",
"신체정보": {
"키": 175.4,
"몸무게": 71.2
},
"취미": [
"등산",
"자전거타기",
"독서"
]
}
이 dict자료가
json_data = json.dumps(python_dict)
print(json_data)
{"\uc774\ub984": "\ud64d\uae38\ub3d9", "\ub098\uc774": 25, "\uac70\uc8fc\uc9c0": "\uc11c\uc6b8", "\uc2e0\uccb4\uc815\ubcf4": {"\ud0a4": 175.4, "\ubab8\ubb34\uac8c": 71.2}, "\ucde8\ubbf8": ["\ub4f1\uc0b0", "\uc790\uc804\uac70\ud0c0\uae30", "\ub3c5\uc11c"]}
dump로 이렇게 바뀜
json_data = json.dumps(python_dict, indent=3, sort_keys=True, ensure_ascii=False)
print(json_data)
"거주지": "서울",
"나이": 25,
"신체정보": {
"몸무게": 71.2,
"키": 175.4
},
"이름": "홍길동",
"취미": [
"등산",
"자전거타기",
"독서"
]
}
json.load()는 기존 이 json으로 변환된 언어를 다시 기존 dict로 바꿔서 보여주는 함수
json_dict = json.loads(json_data)
type(json_dict) # 이게 다시 dict로 출력해줌
json_dict['신체정보']['몸무게'] #신체정보 안의 리스트인 몸무게 정보만 출력; 71.2
json_dict['취미'] # 취미 리스트로 전부 출력
json_dict['취미'][0] #1번째 취미만 출력
XML data에도 적용 可
HTML -> java script -> Markup language -> XML(Extended Markup Language)
HTML은 현재 HTML5(스마트폰 기반까지 고려함)까지 발전됨.
xmltodict 를 pip install로 설치하고 xmltodict를 import
xmltodict.parse로 데이터 정리
xml_data = """<?xml version="1.0" encoding="UTF-8" ?>
<사용자정보>
<이름>홍길동</이름>
<나이>25</나이>
<거주지>서울</거주지>
<신체정보>
<키 unit="cm">175.4</키>
<몸무게 unit="kg">71.2</몸무게>
</신체정보>
<취미>등산</취미>
<취미>자전거타기</취미>
<취미>독서</취미>
</사용자정보>
"""
import xmltodict
dict_data = xmltodict.parse(xml_data, xml_attribs=True)
dict_data
{'사용자정보': {'이름': '홍길동',
'나이': '25',
'거주지': '서울',
'신체정보': {'키': {'@unit': 'cm', '#text': '175.4'},
'몸무게': {'@unit': 'kg', '#text': '71.2'}},
'취미': ['등산', '자전거타기', '독서']}}
웹사이트 경로 추적
import requests
import json
url = "http://api.open-notify.org/iss-now.json"
r = requests.get(url)
print(r.text)
{"message": "success", "iss_position": {"latitude": "-5.4228", "longitude": "-99.9381"}, "timestamp": 1692607641}
json to dict = jason.loads(r. 이름) <- dict로 변환
json_to_dict = json.loads(r.text)
type(json_to_dict)
# 위 아래 같은 dict 출력
url = "http://api.open-notify.org/iss-now.json"
json_to_dict = requests.get(url).json()
type(json_to_dict)
dict
그 값 내용은
{'message': 'success',
'iss_position': {'latitude': '-5.1444', 'longitude': '-99.7384'},
'timestamp': 1692607647}
import time
url = "http://api.open-notify.org/iss-now.json"
def ISS_Position(iss_position_api_url): #web의 json data를 dict로 변환하는 함수
json_to_dict = requests.get(iss_position_api_url).json()
return json_to_dict["iss_position"]
for k in range(5):
print(ISS_Position(url))
time.sleep(10) # 10초 동안 코드 실행을 일시적으로 중지한다.
{'latitude': '-4.9418', 'longitude': '-99.5934'}
{'latitude': '-4.4101', 'longitude': '-99.2130'}
{'latitude': '-3.9033', 'longitude': '-98.8513'}
{'latitude': '-3.3710', 'longitude': '-98.4720'}
{'latitude': '-2.8638', 'longitude': '-98.1113'} <-10초마다 천천히 결과 나온 것들
.json() : 웹의 json을 dict형태로 반환하는 것. (response 안의 json 함수
'Programming > Python' 카테고리의 다른 글
[Pandas] Series (0) | 2023.08.29 |
---|---|
[Pandas] 기본 DF 생성, 출력 확인, 컬럼명 기반 추출 (0) | 2023.08.29 |
[Python] web scraping (0) | 2023.08.21 |
[python] 문자열 편집, 절대경로 상대경로, 데이터 읽고 처리 (1) | 2023.08.21 |
[Python] 모듈, package, random (0) | 2023.08.18 |