반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


[데이터 크롤링] 카카오 api를 활용한 서울 편의점 경위도 크롤링하기 with Python

 

웹 개발 프로젝트를 하면서 지도 api에 편의 시설과의 거리와 마커를 찍기 위해 경위도가 필요해 데이터 크롤링이 필요했다. cctv와 같은 공공 데이터는 공공데이터 포털에서 수집할 수 있었지만, 편의점 데이터는 구할 수가 없어 카카오 api를 이용하여 편의점 경위도를 찾기로 했다.

 

편의점의 경위도는 내가 가지고 있는 서울 동 데이터(총 319개)의 10KM 기준 편의점을 크롤링했다. 20KM로 설정하면 겹치는 부분이 많기 때문에, 리스트에 저장하는데 시간이 많이 소요된다.

 

1. 카카오 api를 활용한 서울 편의점 경위도 크롤링하기  with Python

 

1) 라이브러리 import

- 데이터 프레임과 api를 사용하기 때문에, pandas, request, json을 사용한다.

import pandas as pd
import requests
import json

 

2) 서울의 319개의 동이 입력된 csv 데이터를 읽어온다.

- 데이터가 필요할 시 댓글을 남겨주면 보내줍니다.

dong = pd.read_csv('C:/Users/yong/Documents/b.csv')

 

3) 동 중복 제거

dong = set(dong)

 

4) 서울에 있는 동만큼 반복해서, 지정한 위치의 경위도 인근 편의점 좌표를 찾아 리스트에 저장

- 파라미터는 아래의 카카오 페이지에서 확인할 수 있다.

https://developers.kakao.com/docs/latest/ko/local/dev-guide#search-by-category

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

for addr in dong :
    #동마다 경위도 찾아서 경위도 기준으로 인근 편의점 찾기
    address = addr
    url = 'https://dapi.kakao.com/v2/local/search/address.json?query='+address
    headers={'Authorization':'KakaoAK 0814e4256ff5d0d6432406b7a0d3f4c7'}
    result = json.loads(str(requests.get(url, headers=headers).text))
    
    x = result['documents'][0]['address']['x']
    y = result['documents'][0]['address']['y']
    
    convs={}
    
    #편의점 위치 찾기
    for i in range(1, 46) :
        headers ={'Authorization':'KakaoAK 0814e4256ff5d0d6432406b7a0d3f4c7'}
        #파라미터 가져오기
        params={
        'x' : float(x),
        'y' : float(y),
        'radius':10000, #범위 0~20000까지 단위는 미터
        'page' : i,
        'size':15,
        'sort':'distance'
        }
        keywords = '편의점'
        url = 'https://dapi.kakao.com/v2/local/search/keyword.json?query={}'.format(keywords)
        places = requests.get(url, headers=headers, params=params).json()['documents']
        if places==[]:
            break
        else :
            convs[i] = places
            
    cox = []
    coy = []
    
    for i in range(1, len(convs)):
        for a in range(len(convs[i])):
            cox.append(convs[i][a]['x'])
            coy.append(convs[i][a]['y'])

    corX+=list(set(cox))
    corY+=list(set(coy))

 

5) 빈 데이터 프레임에 경위도 담기

place = pd.DataFrame()
place['lon'] = corX
place['lat'] = corY

 

6) csv파일로 내보내기

place.to_csv('C:/Users/yong/Documents/abc.csv')

 

2. 전체 코드

import pandas as pd
import requests
import json

dong = pd.read_csv('C:/Users/yong/Documents/b.csv')
dong = dong['사직동']
dong = set(dong)

#동마다 경위도 찾아서 경위도 기준으로 인근 편의점 찾기
for addr in dong :
    #자신 위치의 경위도
    address = addr
    url = 'https://dapi.kakao.com/v2/local/search/address.json?query='+address
    headers={'Authorization':'KakaoAK 0814e4256ff5d0d6432406b7a0d3f4c7'}
    result = json.loads(str(requests.get(url, headers=headers).text))
    
    x = result['documents'][0]['address']['x']
    y = result['documents'][0]['address']['y']
    
    convs={}
    
    #편의점 위치 찾기
    for i in range(1, 46) :
        headers ={'Authorization':'KakaoAK 0814e4256ff5d0d6432406b7a0d3f4c7'}
        #파라미터 가져오기
        params={
        'x' : float(x),
        'y' : float(y),
        'radius':10000, #범위 0~20000까지 단위는 미터
        'page' : i,
        'size':15,
        'sort':'distance'
        }
        # 카테고리 키워드
        keywords = '편의점'
        
        # API 접근
        url = 'https://dapi.kakao.com/v2/local/search/keyword.json?query={}'.format(keywords)
        places = requests.get(url, headers=headers, params=params).json()['documents']
        
        # 빈 배열이면 멈춰!
        if places==[]:
            break
        else :
            convs[i] = places
            
    cox = []
    coy = []
    
    corX = []
    corY = []
    #편의점 경위도 cox, coy에 차곡차곡 저장해서 아래의 corX와 corY에 넣기위해 작업
    for i in range(1, len(convs)):
        for a in range(len(convs[i])):
            cox.append(convs[i][a]['x'])
            coy.append(convs[i][a]['y'])
    
    #계속 리스트에 차곡차곡 저장
    corX+=list(set(cox))
    corY+=list(set(coy))

#빈 데이터 프레임 생성해서 column에 저장
place = pd.DataFrame()
place['lon'] = corX
place['lat'] = corY

#csv 파일로 내보내기
place.to_csv('C:/Users/yong/Documents/abc.csv')
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기