반응형
츄르사려고 코딩하는 코집사입니다.
[데이터 크롤링] 카카오 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
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')
반응형
'빅데이터 분석 > 빅데이터 분석 학습' 카테고리의 다른 글
[데이터 크롤링] 서울 약국 경위도 크롤링하기 with Python (0) | 2021.05.25 |
---|---|
[데이터 크롤링] 서울 카페 경위도 크롤링하기 with Python (0) | 2021.05.25 |
[Python 크롤링] 네이버 뉴스 크롤링하기 with Python (0) | 2021.05.24 |
엔트로피(Entropy) 머신러닝 통계 - 의사결정나무(Decision Tree) (0) | 2020.12.17 |
파이썬 크롤링을 이용한 주식매매동향 간략한 데이터 분석 (1) | 2020.11.28 |
인포그래픽과 빅데이터 시각화의 차이 (0) | 2020.09.09 |
통계 일변량 분석 기초 (0) | 2020.08.27 |
빅데이터 분석과 데이터베이스 이론 (0) | 2020.08.25 |
최근댓글