[ 측정소 정보 추출하기 ]
📌 대구에 있는 측정소의 측정소 명, 측정소 주소, 위도, 경도, 설치년도를 csv 파일로 저장
import requests
import json
# 1. 초기값 설정
# 1) 서비스 키: requests 사용시 자동으로 인코딩되어 decoding된 키를 사용
service_key:str = 'uAhO32pV0qa7BDOmkJLhw2ZyOB9i5bGj7cMN8cuuHmKIwyyf29lHLjym8hBXdIaXyvAI1IyLvQZopk5HW233qQ=='
# 2) url 설정
url = 'http://apis.data.go.kr/B552584/MsrstnInfoInqireSvc/getMsrstnList'
parameter = f'?serviceKey={service_key}&returnType=json&numOfRows=100&pageNo=1&addr=대구'
print(url+parameter)
# 2. 서버에서 요청값을 받은 후 파싱(parsing)(= 구문 분석)
# 딕셔너리 데이터를 분석해서 원하는 값을 추출
response = requests.get(url + parameter)
# requests.get() 메서드를 사용하여 url 주소로 GET 요청을 보내고, 응답을 response 변수에 저장
json_data = response.text
# head 값 외 text 값만 들고오기 위함
dict_data = json.loads(json_data)
# JSON 형식의 데이터를 파이썬 객체로 변환하여 data 변수에 저장
print(dict_data)
'''
실행결과)
{'response': {'body': {'totalCount': 28, 'items':
[{'dmX': '35.859', 'item': 'SO2, CO, O3, NO2, PM10, PM2.5', 'mangName': '도시대기',
'year': '2020', 'addr': '대구광역시 서구 서대구로3길 46 내당4동 행정복지센터 3층 옥상 (
... 생략...
'''
# 3. 필요 정보 추출
count_datas = dict_data['response']['body']['items']
#print(count_datas)
for k in range(len(count_datas)):
count_data = count_datas[k]
if count_data['addr'][0:2] == "대구":
print(f'측정소 명 : {count_data["stationName"]}')
print(f'측정소 주소 : {count_data["addr"]}')
print(f'위도 : {count_data["dmX"]}')
print(f'경도 : {count_data["dmY"]}')
print(f'설치년도 : {count_data["year"]}')
print('=' * 20)
'''
실행결과)
측정소 명 : 내당동
측정소 주소 : 대구광역시 서구 서대구로3길 46 내당4동 행정복지센터 3층 옥상 (내당동)
위도 : 35.859
경도 : 128.55183
설치년도 : 2020
====================
측정소 명 : 침산동
측정소 주소 : 대구광역시 북구 옥산로17길 21 대구일중학교 (침산동)
위도 : 35.88761
경도 : 128.58434
설치년도 : 2020
... 생략...
'''
# 4. csv 파일 저장
import csv
data_list: list[str] = ['측정소 명', '측정소 주소', '위도', '경도', '설치년도']
daegu_list:list[dict] = list()
for k in range(len(count_datas)):
count_data = count_datas[k]
if count_data['addr'][0:2] == "대구":
new_data: dict = dict()
new_data[data_list[0]] = count_data["stationName"]
new_data[data_list[1]] = count_data["addr"]
new_data[data_list[2]] = count_data["dmX"]
new_data[data_list[3]] = count_data["dmY"]
new_data[data_list[4]] = count_data["year"]
daegu_list.append(new_data)
with open('../output_02/daegu_air_list.csv', 'w', newline='', encoding='UTF-8') as csvfile:
csv_writer = csv.DictWriter(csvfile, data_list)
csv_writer.writeheader()
for data in daegu_list:
data:dict
csv_writer.writerow(data)
print(f'파일이 생성되었습니다.')
[ 내용 참고 : IT 학원 강의 ]
'Programming Language > Python' 카테고리의 다른 글
[Python] 웹 크롤링 | request 와 requests, 크롤링 허용 여부 확인방법 (1) | 2024.03.07 |
---|---|
[Python] XML 정의 및 xmltodict 라이브러리, 예제 (2) | 2024.03.06 |
[Python] 공공데이터 활용한 JSON API 예제 (2) | 2024.03.05 |
[Python] JSON 파일 입출력 | 인코딩(encoding) 및 디코딩(decoding), API (2) | 2024.03.05 |
[Python] CSV 파일 입출력, reader()/writer(), DictReader()/DictWriter() (2) | 2024.03.04 |