EDA 과제 1 - 스타벅스 이디야 매장 데이터 분석

조지원·2023년 6월 25일

EDA 과제 and TEST

목록 보기
1/1

💡 1. Import

# 판다스
import pandas as pd

# 다양한 계산
import numpy as np

# 진행결과를 눈으로 볼수 있음
from tqdm import tqdm

# 자동화 웹크롤링
from selenium import webdriver
from selenium.webdriver.common.by import By

# 정적 웹크롤링
from bs4 import BeautifulSoup

# 시간차를 주기 위해
import time
# 맵에 마커를 찍기 위해
from folium import Marker
import folium

# 맵 정보를 불러오기 위해
import googlemaps

# 그래프 시각화
import matplotlib.pyplot as plt

# 한국어 폰트 설정
import koreanize_matplotlib
%matplotlib inline


💡 2. 서울시의 스타벅스 매장의 이름과 주소, 구 이름을 pandas data frame으로 정리

목표 : 스타벅스 웹사이트에서 정보를 가져오기 위해
1. 웹주소로 접근 후
2. 지역 검색 클릭 하고
3. 서울 클릭하고 전체 클릭 후
4. HTML 정보 가져오기


selenium 사용 : 자동화를 위해

  • 웹 주소 접근
driver = webdriver.Chrome("../driver/chromedriver.exe")

url = "https://www.starbucks.co.kr/store/store_map.do"

driver.get(url)

  • 화면 최대화
driver.maximize_window()

time.sleep(3)

  • 지역 검색 클릭
starbucks_area_search_btn = driver.find_element(By.CSS_SELECTOR, "#container > div > form > fieldset > div > section > article.find_store_cont > article > header.loca_search > h3 > a")

starbucks_area_search_btn.click()

time.sleep(3)

  • 서울 클릭
starbucks_seoul_btn = driver.find_element(By.CSS_SELECTOR, "#container > div > form > fieldset > div > section > article.find_store_cont > article > article:nth-child(4) > div.loca_step1 > div.loca_step1_cont > ul > li:nth-child(1) > a")

starbucks_seoul_btn.click()

time.sleep(3)

  • 전체 클릭
starbucks_all_btn = driver.find_element(By.CSS_SELECTOR, "#mCSB_2_container > ul > li:nth-child(1) > a")

starbucks_all_btn.click()

time.sleep(3)

Beautiful Soup 사용 : 정적페이지(?) 일때 사용

  • 스타벅스 주소 HTML 데이터 가져오기
html = driver.page_source

soup = BeautifulSoup(html, "html.parser")
tmp = soup.find("div", id = "mCSB_3_container") 

li_class_all = tmp.find_all("li")

li_class_all[0]

결과 :

<li class="quickResultLstCon" data-code="3762" data-hlytag="null" data-index="0" data-lat="37.501087" data-long="127.043069" data-name="역삼아레나빌딩" data-storecd="1509" style="background:#fff"> <strong data-my_siren_order_store_yn="N" data-name="역삼아레나빌딩" data-store="1509" data-yn="N">역삼아레나빌딩  </strong> <p class="result_details">서울특별시 강남구 언주로 425 (역삼동)<br/>1522-3232</p> <i class="pin_general">리저브 매장 2번</i></li>

  • 길이 테스트
len(li_class_all)

결과 :

603

  • 가져온 HTML 정보 정리 및 테스트
for li in li_class_all[:3]:

    name = li.find("strong").text.strip()
    
    # 지저분한 번호 제거 
    address = li.find("p").text.replace("1522-3232", "")  
    
    gu = address.split(" ")[1]   # "구"  위치 : index[1]
    
    print(name, address, gu)

결과 :

<li class="quickResultLstCon" data-code="3762" data-hlytag="null" data-index="0" data-lat="37.501087" data-long="127.043069" data-name="역삼아레나빌딩" data-storecd="1509" style="background:#fff"> <strong data-my_siren_order_store_yn="N" data-name="역삼아레나빌딩" data-store="1509" data-yn="N">역삼아레나빌딩  </strong> <p class="result_details">서울특별시 강남구 언주로 425 (역삼동)<br/>1522-3232</p> <i class="pin_general">리저브 매장 2번</i></li>
603
역삼아레나빌딩 서울특별시 강남구 언주로 425 (역삼동) 강남구
논현역사거리 서울특별시 강남구 강남대로 538 (논현동) 강남구
신사역성일빌딩 서울특별시 강남구 강남대로 584 (논현동) 강남구

  • 리스트에 담기
starbucks_list = []

for li in li_class_all:

    name = li.find("strong").text.strip()
    
    address = li.find("p").text.replace("1522-3232", "")
    
    gu = address.split(" ")[1]  
    
    content = {
        "매장이름" : name,
        "매장주소" : address,
        "구" : gu,
        "브랜드" : "Starbucks"
    }
    starbucks_list.append(content)
    
starbucks_list

결과 :

[{'매장이름': '역삼아레나빌딩',
  '매장주소': '서울특별시 강남구 언주로 425 (역삼동)',
  '구': '강남구',
  '브랜드': 'Starbucks'},
 {'매장이름': '논현역사거리',
  '매장주소': '서울특별시 강남구 강남대로 538 (논현동)',
  '구': '강남구',
  '브랜드': 'Starbucks'},
 {'매장이름': '신사역성일빌딩',
  '매장주소': '서울특별시 강남구 강남대로 584 (논현동)',
  '구': '강남구',
  '브랜드': 'Starbucks'},
 {'매장이름': '국기원사거리',
  '매장주소': '서울특별시 강남구 테헤란로 125 (역삼동)',
  '구': '강남구',
  '브랜드': 'Starbucks'},
 {'매장이름': '대치재경빌딩R',
  '매장주소': '서울특별시 강남구 남부순환로 2947 (대치동)',
  '구': '강남구',
  '브랜드': 'Starbucks'},
 {'매장이름': '봉은사역',
  '매장주소': '서울특별시 강남구 봉은사로 619 (삼성동)',
  '구': '강남구',
  '브랜드': 'Starbucks'},
 {'매장이름': '압구정윤성빌딩',
...
 {'매장이름': '양원역',
  '매장주소': '서울특별시 중랑구 양원역로10길 3 (망우동)',
  '구': '중랑구',
  '브랜드': 'Starbucks'},
 {'매장이름': '중화역', '매장주소': '서울특별시 중랑구 봉화산로 35 ', '구': '중랑구', '브랜드': 'Starbucks'}]

  • 길이 테스트 : 위에서 가져온 정보 길이와 같은지
len(starbucks_list)

  • DataFrame 만들기
df_starbucks = pd.DataFrame(starbucks_list)

df_starbucks


💡 3. 서울시의 이디야 매장의 이름과 주소, 구 이름을 pandas data frame으로 정리

  1. 이디야 홈페이지(매장찾기)
  2. 주소 클릭
  3. 검색어 창 클릭
  4. 검색어 삭제
  5. 각각 검색어 입력, 검색 버튼 클릭

selenium 사용 : 자동화를 위해

  • 웹 주소 접근
driver = webdriver.Chrome("../driver/chromedriver.exe")

url = "https://ediya.com/contents/find_store.html"

driver.get(url)

  • 화면 최대화
driver.maximize_window()

profile
keep going

0개의 댓글