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