Eggs Sunny Side Up
본문 바로가기
Web/Crawling

한솥도시락 data 크롤링

by guswn100059 2023. 4. 9.
from selenium import webdriver as wb
# 웹브라우저를 제어하기 위한 라이브러리

from selenium.webdriver.common.keys import Keys
# 웹에게 값을 "입력"받기 위한 라이브러리

from selenium.webdriver.common.by import By
# html 문서에서 태그와 선택자의 위치를 찾기 위한 라이브러리

from bs4 import BeautifulSoup as bs
# 컴퓨터가 이해하기 쉬운 객체로 변경해주는 라이브러리

import time
# time.sleep(몇 초?)
# 몇 초만큼 기다렸다가 다음 코드가 실행됨.

 

### 한솥도시락 전체 메뉴 및 가격크롤링

driver = wb.Chrome()
driver.get('https://www.hsd.co.kr/menu/menu_list')

# bs 객체화 : bs(parsing할 html문서, 'parsing 방법')
driver.page_source
soup = bs(driver.page_source, 'lxml')

soup.select('h4, h fz_03')[0].text

soup.select('div.item-price>strong')[0].text

menu = soup.select('h4, h fz_03')
menu

price = soup.select('div.item-price>strong')
price

# 반복문을 사용해서 한솥도시락 전체 메뉴 이름과 가격을  수집

for i in range(len(menu)) :
    print(menu[i].text)
    
for i in range(len(price)) :
    print(price[i].text)

#### 더보기 버튼 눌러보기
 - 한솥도시락 페이지는 더보기 버튼을 누르지 않으면 모든 메뉴가 보이지 않는다.
 - 더보기를 모두 눌러 모든 메뉴 정보를 수집!

# 더보기 버튼 위치를 찾아야한다 -> CLASS 값을 기준으로 가져와야한다.
btn_more = driver.find_element(By.CLASS_NAME, 'c_05')
btn_more.click()

# 더보기 버튼이 몇 번 중복되는지 알 수 없다면?
# 일단 몇 번인지 모르기 때문에 15번 정도 눌러보자
# 오류가 뜬다.
for i in range(15) :
    btn_more = driver.find_element(By.CLASS_NAME, 'c_05')
    btn_more.click()

#### 예외처리 하는 방법
 - 실행할 부분(try)은 모두 실행하고, 만약 오류가 나면 예외처리(except)하기

# 원래 코드 실행 시 에러가 발생하면 밑에 작성된 코드들은 중간에 멈춤
# 멈추지말고 계속해서 아래 코드를 실행할 수 있도록 예외처리 진행
try :
    # 에러가 나기 전까지 실행할 부분을 try 부분에 작성
    for i in range(15) :
        btn_more = driver.find_element(By.CLASS_NAME, 'c_05')
        btn_more.click()
except :
    # 에러가 났을 때 실행할 부분을 except 부분에 작성
    print('클릭 완료')

#### time 라이브러리
 - 코딩 중간에 쉬는 시간을 부여해주는 라이브러리

import time
# time.sleep(몇 초?)
# 몇 초만큼 기다렸다가 다음 코드가 실행된다.
# 사람이 처리하는 것처럼 해야 서버에 부하가 가지 않음

try :
    for i in range(15) :
        btn_more = driver.find_element(By.CLASS_NAME, 'c_05')
        btn_more.click()
        time.sleep(2) # 2초 동안 쉬는시간
except :
    print('클릭 완료')

 

한솥도시락 전체 메뉴 및 가격크롤링

import pandas as pd

# 한솥도시락 페이지의 모든 메뉴명과 가격 데이터를 수집
driver = wb.Chrome()
driver.get('https://www.hsd.co.kr/menu/menu_list')
time.sleep(2)

try :
    for i in range(15) :
        btn_more = driver.find_element(By.CLASS_NAME, 'c_05')
        btn_more.click()
        time.sleep(2)
except :
    print('클릭 완료')
    
driver.page_source
soup = bs(driver.page_source, 'lxml')

menu = soup.select('h4.h.fz_03')
price = soup.select('div.item-price>strong')

menulist = []
pricelist = []

for i in range(len(menu)) :
    menulist.append(menu[i].text)
    pricelist.append(price[i].text)
    
# driver.close()

dic = {'메뉴':menulist, '가격':pricelist}
h = pd.DataFrame(dic)
h


# 데이터프레임 순위를 숨기는 방법, 삭제는 불가능
h.style.hide_index()

total = []

for i in range(len(menu)) :
    total.append([menu[i].text, price[i].text])

print(total)

 

'Web > Crawling' 카테고리의 다른 글

포켓몬 이미지 데이터 수집  (0) 2023.04.12
Gmarket 상품정보 수집  (0) 2023.04.10
selenium 라이브러리  (0) 2023.04.09
웹페이지 데이터 수집  (0) 2023.04.06
멜론차트 TOP100 수집하기  (0) 2023.04.05

댓글