한솥도시락 데이터 수집 Selenium

Happy_JG·2023년 8월 28일
0

크롤링

목록 보기
5/8
post-custom-banner

라이브러리 호출

from selenium import webdriver as wb
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

한솥도시락 페이지 이동

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

상품 이름 수집
선택자가 class나 id가 아닌 요소로 찾기(class이긴 함)

title = driver.find_elements(By.CSS_SELECTOR,".h.fz_03")

글자 꺼내오기

for i in title:
	print(i.text)

가격 정보 수집

price = driver.find_elements(By.CLASS_NAME,"item-price")
for i in price:
    print(i.text)

개수 세기

len(title)
#18
len(price)
#18

더보기 버튼 클릭
더보기를 클릭해야 최신의 데이터를 받아올 수 있다.

btn = driver.find_element(By.CSS_SELECTOR,".c_05")
btn.click()

개수 세기

len(title)
#73

더보기를 끝까지 반복

for i in range(15):
	btn = driver.find_element(By.CSS_SELECTOR,".c_05")
    btn.click()

예외처리
코드를 실행하다가 에러가 나는 경우 에러가 아닌 다른 코드를 실행
try : 에러가 나기 전까지 실행할 코드
except : 에러가 났을 때 실행할 코드

기본 설정

try : #에러가 나기 전까지 실행할 코드

except: #에러가 났을 때 실행할 코드

끝까지 데이터 모두 가져오기

try:
    for i in range(15):
        btn = driver.find_element(By.CSS_SELECTOR,".c_05")
        btn.click()
except : 
    print("더보기가 없습니다.")

수집된 요소를 텍스트 데이터만 추출

title_list = []
price_list = []
for i in range(len(price)):
    title_list.append(title[i].text)
    price_list.append(price[i].text)

csv 저장

import pandas as pd

dic = {"상품명" : title_list, "가격정보" : price_list}
hansot = pd.DataFrame(dic)
hansot.to_csv("한솥.csv", encoding="euc-kr")

time.sleep() VS implicitly_wait

time : 무조건 내가 설정한 시간만큼 코드를 중단
implicitly_wait : 설정한 시간보다 완료된 시간이 짧으면 완료가 된 기점으로 코드가 진행. 네트워크 환경이 좋을 때 효율이 좋다.

from selenium import webdriver as wb
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import pandas as pd

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

time.sleep(3)

try:
    for i in range(15):
        btn = driver.find_element(By.CSS_SELECTOR,".c_05")
        btn.click()
        time.sleep(3)
except : 
    print("더보기가 없습니다.")
    
title = driver.find_elements(By.CSS_SELECTOR,".h.fz_03")
price = driver.find_elements(By.CLASS_NAME,"item-price")

title_list = []
price_list = []
for i in range(len(price)):
    title_list.append(title[i].text)
    price_list.append(price[i].text)

dic = {"상품명" : title_list, "가격정보" : price_list}
hansot = pd.DataFrame(dic)
hansot.to_csv("한솥.csv", encoding="euc-kr")
profile
hello!
post-custom-banner

0개의 댓글