-
[Crawling] 스타벅스 매장 위치 데이터 크롤링하기프로그래밍/Python 2023. 1. 26. 17:12728x90
Python으로 크롤링 하는 법
파이썬으로 크롤링하는 방법은 크게 selenium을 쓰는 방법과 requests를 사용해서 하는 방법으로 나뉜다.
평상시에 윈도우가 아닌 환경에서 Jupyter를 사용하고 requests를 사용하여 크롤링하는 것이 속도 측면에서 더 나아서 크롤링할 때는 requests를 사용한다.
검색해보면 BeautifulSoup와 selenium을 사용하여 크롤링하는 방법 위주로 설명된 블로그들이 많아, requests를 이용해서 스타벅스의 매장 위치를 크롤링 하는 방법을 소개하고자 한다.
소스 코드
import math import random import requests import pandas as pd
스타벅스 홈페이지에서 매장을 불러오는 구조를 보면 randomString을 요구하고 있으므로 js로 구현된 해당 함수를 python으로 재작성하였다.
def randomString(): chars = "0123456789ABCDEFGHIKLMNOPQRSTUVWXYZ"; string_length = 10; randomstring = ''; for i in range(0, string_length): rnum = int(math.floor(random.random() * len(chars))); randomstring += chars[rnum : rnum+1]; return randomstring
이후 매장 정보를 불러오는 함수에서는 시군구 리스트를 요구하는데, requests.post를 이용하여 추출하였다.
def getGugunList(): url = 'https://www.starbucks.co.kr/store/getGugunList.do' gugunlist = [[]] for i in range(1, 18): #17개의 시군구를 담음 datas = { 'sido_cd': str(i).zfill(2) } response = requests.post(url, data=datas).json() for j in range(0, len(response['list'])): gugunlist[i-1].append(response['list'][j]) gugunlist.append([]) return gugunlist
매장을 불러오는 js함수를 python으로 재작성한 것이다.
def getStore(p_gugun_cd, p_sido_cd): randomStr = randomString() url = 'https://www.starbucks.co.kr/store/getStore.do?r=' + randomStr datas = { 'P10': 0, 'P20': 0, 'P30': 0, 'P40': 0, 'P50': 0, 'P60': 0, 'P70': 0, 'P80': 0, 'P90': 0, 'T01': 0, 'T03': 0, 'T05': 0, 'T09': 0, 'T10': 0, 'T12': 0, 'T21': 0, 'T22': 0, 'T27': 0, 'T30': 0, 'T36': 0, 'T43': 0, 'T48': 0, 'all_store': 0, 'iend': "100", 'in_biz_cd': "", 'in_biz_cds': 0, 'in_distance': 0, 'in_scodes': 0, 'ins_lat': 37.0, 'ins_lng': 126.0, 'isError': True, 'new_bool': 0, 'p_gugun_cd': p_gugun_cd, 'p_sido_cd': p_sido_cd, 'rndCod': randomStr, 'searchType': "C", 'search_text': "", 'set_date': "", 'whcroad_yn': 0 } response = requests.post(url, data=datas).json() return response;
사용자 정의 함수로 모두 만들어두었으니 절차에 맞게 호출하여 List에 담으면 된다.
Gugun = getGugunList() result = [] for i in range(0, len(Gugun)): for j in range(0, len(Gugun[i])): Store = getStore(Gugun[i][j]['gugun_cd'], Gugun[i][j]['gugun_cd'][0:2]) Store = Store['list'] for k in range(0, len(Store)): savedata = { 'sido_name': Store[k]['sido_name'], 'gugun_name': Store[k]['gugun_name'], 'addr': Store[k]['addr'], 's_name': Store[k]['s_name'], 'lat': Store[k]['lat'], 'lot': Store[k]['lot'] } result.append(savedata)
이후 보기 좋게 result list에 담긴 데이터를 아래와 같이 DataFrame으로 만들어서 볼 수 있다.
selectdata = pd.DataFrame(result) selectdata
728x90댓글