Project/Convenience Store Location Analysis

[편의점 매출 예측] 데이터 수집- 크롤링 python 함수 구현(서울열린데이터 광장 API )

skwkiix 2023. 9. 8. 18:14
728x90

 

서울 열린데이터 광장 API 크롤링 위한 코드 구현


인증코드를 발급받았다는 전제하에 진행

인증키로 샘플데이터 테스트는 다음의 포스팅을 참조

https://datapilots.tistory.com/23

 

[Web] API 크롤링 - 서울 열린데이터광장 유동인구 API 크롤링

API 크롤링 이 포스팅은 "서울 열린데이터광장"의 회원가입 및 인증키 발급이 완료된 상태를 전제로 한다. 서울 열린데이터 광장에서 제공하는 open api를 통해 JSON 파일의 데이터를 크롤링할 것이

datapilots.tistory.com


1. 크롤링 페이지 정보 확인

예시 ) 상권 - 추정매출

URL

 http://openapi.seoul.go.kr:8088

/(인증키)/(요청파일타입)/VwsmTrdarSelngQq/(요청시작위치)/(요청끝위치)/(기준년코드)/(상권구분코드)

 

주의사항

한번에 1000개 까지 호출 가능


2. 크롤링 코드 구현

Step 0 .라이브러리 임포트

import requests
import pandas as pd

 

Step 1 . 함수 구현

  • 서비스명, 저장할 이름, 인증키를 파라미터로 받음
  • years 는 임의로 설정하였음
  • while 문 사용하여 연도별 데이터가 없을 때까지 반복
import requests
import pandas as pd

def apidata(service, df_name, apikey): # 서비스명, 저장할 이름, 인증키
    years = [2020, 2021, 2022] # 3개년 데이터

    data_dict = {}

    for year in years:
        page = 1  # 초기식

        while True:
            end_num = page * 1000
            start_num = end_num - 999
            url = f'http://openapi.seoul.go.kr:8088/{apikey}/json/{service}/{start_num}/{end_num}/{year}'
            res = requests.get(url)
            sales_data = res.json()

            # 데이터가 있는지 확인
            if f'{service}' in sales_data and 'row' in sales_data[f'{service}']:
                if year not in data_dict:
                    data_dict[year] = []  # Create a list for the year if it doesn't exist
                data_dict[year].append(pd.DataFrame(sales_data[f'{service}']['row']))
                page += 1
            else:
                break  # 데이터가 없으면 종료

 

Step 02. 연도별 데이터 concat

 # 데이터 프레임 concat (20,21,22)
    combined_data = pd.concat([pd.concat(df_list, ignore_index=True) for df_list in data_dict.values()], ignore_index=True)

 

Step 02. 함수 호출

  • 파라미터를 입력하여 함수 호출
service_name = 'VwsmTrdhlAptQq' # 서비스명
csv_file_name = '상권배후지_아파트_3' # 저장할 파일명
apikey = ''

apidata(service_name, csv_file_name, apikey)

위의 코드를 사용하여 서울 열린데이터 광장의 상권분석 서비스 데이터를 수집하였다.

 

 

728x90