[ 측정소 정보 추출하기 ]

   📌  대구에 있는 측정소의 측정소 명, 측정소 주소, 위도, 경도, 설치년도를 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)

일반 인증키를 서비스 키로 가져온다

 

사이트에 올라와 있는 zip 파일에 서버에 소스 요청할 때 요구하는 메세지 형식이 나와있다.

 

 

# 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 학원 강의 ]

+ Recent posts