from selenium import webdriver as wb
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
In [1]:
# 1. 브라우저를 실행하고 한솥사이트로 이동
driver = wb.Chrome()
driver.get("https://www.hsd.co.kr/menu/menu_list")
In [2]:
# 2. 상품이름 수집
title = driver.find_elements(By.CSS_SELECTOR, ".h.fz_03")
for i in title :
print(i.text)
In [3]:
# 3. 상품가격 수집
price = driver.find_elements(By.CSS_SELECTOR," div > div.item-text > div > strong")
for i in price :
print(i.text)
In [4]:
len(title)
Out[4]:
64
In [5]:
# 더보기 버튼 클릭
# 더보기를 클릭해야 최신의 데이터를 받아올 수 있다.
btn = driver.find_element(By.CSS_SELECTOR, ".c_05")
btn.click()
In [6]:
# 더보기를 끝까지 반복
for i in range(15):
btn = driver.find_element(By.CSS_SELECTOR, ".c_05")
btn.click()
예외처리
- 코드를 실행하다가 에러가 나는 경우 에러가 아닌 다른 코드를 실행
- try = 에러가 나기 전까지 실행할 코드
- except = 에러가 났을 때 실행할 코드
In [7]:
# 셀레니움을 통해서 요청을 보낼때는 사람처럼 코드를 짜기
# 컴퓨터는 요청을 매우 빠르게 처리하기 때문에
# 클라이언트가 서버에게 무리한 요청을 하면 서버는 부하를 느낌 -> 아이피 차단, 반응하기 전 오류가 남
# time.sleep("초") -> 해당하는 시간만큼 코드가 멈춘다
# 반드시 요청과 응답이 있는 경우에 사용하는 걸 권장
import time
In [8]:
try :
# 에러가 나기 전까지 실행할 코드
for i in range(15):
btn = driver.find_element(By.CSS_SELECTOR, ".c_05")
btn.click()
time.sleep(3)
except :
# 에러가 났을 때 실행할 코드
print("더보기가 없습니다.")
더보기가 없습니다.
In [9]:
title = driver.find_elements(By.CSS_SELECTOR, ".h.fz_03")
len(title)
Out[9]:
102
In [10]:
# 수집된 요소를 텍스트 데이터만 추출
title_list = []
price_list = []
for i in range(len(title)) :
title_list.append(title[i].text)
price_list.append(price[i].text)
한셀에 코드 합치기
- 프로그램(실행파일) 제작할 때는 반드시 코드를 한셀에 합쳐야 한다
In [11]:
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")
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.CSS_SELECTOR, "div > div.item-text > div > strong")
# -- 데이터 수집 단계 --
title_list = []
price_list = []
for i in range(len(title)) :
title_list.append(title[i].text)
price_list.append(price[i].text)
# -- 데이터 가공 단계 --
dic = {"상품명" : title_list, "가격정보" : price_list}
pd.DataFrame(dic)
hansot = pd.DataFrame(dic)
hansot.to_csv("한솥.csv",encoding="euc-kr")
# -- 데이터 활용 단계 ---
더보기가 없습니다.
크롤링하는 프로세스
- 데이터 준비, 데이터 수집, 데이터 가공, 데이터 활용
- 데이터 준비 = 완벽한 데이터를 수집하기 위해서 화면 준비를 하는 단계 (더보기 버튼을 다 누르는 행위, 화면 스크롤을 최하단까지 이동)
- 데이터 수집 = 준비된 데이터(html)에서 필요한 요소를 수집
- 데이트 가공 = 수집된 데이터(요소)를 필요한 컨텐츠, 속성만 가공
- 데이터 활용 = 가공된 데이터를 표, 파일로 제작
크롤링 팁
- 반드시 selenium을 활용할 때는 'Cell Run All' 금지!
- 항상 사람처럼 코딩 작성
- 요청과 응답 사이에는 반드시 시간을 부여
- tip!
- time.sleep vs implicitly_wait
- time : 무조건 내가 설정한 시간만큼 코드를 중단
- implicitly_wait : 설정한 시간보다 완료된 시간이 짧으면 완료가 된 기점으로 코드가 진행 -> 네크워크 환경이 좋을 때는 장점
'Study > Python' 카테고리의 다른 글
[Python] 크롤링 이미지 데이터 수집하기 (0) | 2023.09.05 |
---|---|
[Python] 크롤링 네이버 지도 데이터 수집- iframe 전환 (0) | 2023.09.04 |
[Python] Selenium 기초 조작법 (0) | 2023.08.31 |
[Python] 크롤링 쇼핑몰 리뷰 수집하기 (0) | 2023.08.30 |
[Python] 크롤링 멜론차트 데이터 수집 (0) | 2023.08.29 |