-
스타벅스 매장 지도에 표시하고 csv 파일로 저장하기포트폴리오 2020. 6. 19. 16:30
스타벅스 전국 매장 Crawling
-
찾은 스타벅스 매장 지도에 표시
-
데이터 csv 파일로 저장
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from bs4 import BeautifulSoup import time import folium import collections from collections import OrderedDict import csv
Selenium을 사용하여 데이터 Crawling
-
스타벅스 홈페이지의 매장찾기 - 지역 검색 - 전체 - 지점 크롤링
-
마지막 세종시는 클릭하면 바로 검색되므로 예외처리
chrome_driver = 'D:/bigdata/Jupyter_python/chromedriver.exe' driver = webdriver.Chrome(chrome_driver) driver.implicitly_wait(5) # 응답의 시간 지연 # url = 'https://www.starbucks.co.kr/store/getStore.do?r=24F3U9PI7Q' url = 'https://www.starbucks.co.kr/store/store_map.do' # chrome driver로 해당 페이지가 물리적으로 open driver.get(url) # 값을 담을 리스트 starbucks = [] # 열린 페이지에서 '지역 검색' 탭 클릭 search = driver.find_element_by_link_text('지역 검색') time.sleep(1) search.click() time.sleep(1) # 개발자도구로 class : set_sido_cd_btn의 데이터 긁어옴 search = driver.find_elements_by_class_name('set_sido_cd_btn') for item in search: item.click() time.sleep(1) # data-sidocd='01~17' 서울~세종 if '17' == item.get_attribute('data-sidocd'): # 소스 가져오기 src = driver.page_source # BeautifulSoup 객체로 변환 soup = BeautifulSoup(src) name = soup.select('li[data-name]') for name_one in name: x = name_one['data-lat'] # 위도 저장 y = name_one['data-long'] # 경도 저장 z = name_one['data-name'] # 지점명 저장 p = name_one.select_one('p').text.split('1522-3232')[0] # 번호는 모든 지점이 동일하여 crawling에서 제외 starbucks.append({'name': z, 'address': p, 'lat': x, 'long':y}) # dict 형태로 리스트에 저장 time.sleep(1) # 열린 페이지 닫기 driver.close() else: search2 = driver.find_element_by_link_text('전체') search2.click() driver.implicitly_wait(5) time.sleep(1) src = driver.page_source soup = BeautifulSoup(src) name = soup.select('li[data-name]') for name_one in name: x = name_one['data-lat'] y = name_one['data-long'] z = name_one['data-name'] p = name_one.select_one('p').text.split('1522-3232')[0] starbucks.append({'name': z, 'address': p, 'lat': x, 'long':y}) time.sleep(1) # 다시 지역 검색 탭으로 돌아가기위한 소스 search3 = driver.find_element_by_link_text('지역 검색') search3.click() time.sleep(1)
# 리스트 중복값 제거 starbucks = list(map(dict, collections.OrderedDict.fromkeys(tuple(sorted(d.items())) for d in starbucks)))
folium을 이용하여 지도에 표시
# 지도 작성 map_list = folium.Map(location=[35.95, 128.25], zoom_start=7) for item in starbucks: latitude = float(item['lat']) # 위도 longtitude = float(item['long']) # 경도 # 지점 위치 표시 folium.Marker( location = [latitude, longtitude], popup = 'jijum : {}, addr : {}'.format(item['name'], item['address']), # icon 적용 할 때 부트스트랩 최신버전을 사용하면 표시안됨. 3버전 이용 icon=folium.Icon(color='green', icon='glyphicon glyphicon-star') ).add_to(map_list) map_list
Make this Notebook Trusted to load map: File -> Trust Notebook데이터 엑셀 파일로 저장
# newline=''을 넣으면 공백라인 제거 with open('starbucks.csv', 'w', newline='') as f: fieldnames =['지점명', '주소', '위도', '경도'] writer = csv.DictWriter(f, fieldnames=fieldnames) writer.writeheader() for i in starbucks: writer.writerow({'지점명': i['name'], '주소': i['address'], '위도': i['lat'], '경도': i['long']})
'포트폴리오' 카테고리의 다른 글
팀 프로젝트 (0) 2020.08.18 카카오 API를 사용하여 '호식이두마리치킨' 가맹점 찾기 (2) 2020.06.15 카카오 API와 openpyxl를 이용한 서울시 무인발급기 지도에 표시하기 (0) 2020.06.10 카카오 API를 이용한 지도에 식당위치 표시하기 (0) 2020.06.10 -