라이브러리 호출
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")