DeseoDeSeo
[Crawling] 도시락 업체 데이터 수집 본문
브라우저 및 컴퓨터용 키보드. 선택자의 구분자 역할 하는 라이브러리 불러오기
from selenium import webdriver as wb
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
1. 브라우저를 실행하고 -> 한솥 사이트로 이동
driver = wb.Chrome()
driver.get("https://www.hsd.co.kr/menu/menu_list")
2. 상품이름 수집
title = driver.find_elements(By.CSS_SELECTOR,".h.fz_03")
for i in title:
print(i.text)
3. 상품가격 수집
price = driver.find_elements(By.CSS_SELECTOR," div > div.item-text > div > strong")
for i in price:
print(i.text)
- 보기 버튼 클릭
# 더보기를 클릭해야 최신의 데이터를 받아 올 수 있다.
btn = driver.find_element(By.CSS_SELECTOR,".c_05")
btn.click()
# 더보기를 끝까지 반복
for i in range(15):
btn = driver.find_element(By.CSS_SELECTOR,".c_05")
btn.click()
예외처리
: 코드를 실행하다가 에러가 나는 경우 에러가 아닌 다른 코드를 실행함.
# selenium을 통해서 요청을 보낼때는 반드시 사람처럼 보이게 코드를 만들어야함.
# 컴퓨터는 요청을 매우 빠르게 처리하기 때문에
# 클라이언트가 서버에게 무리한 요청을 하면 서버는 부하를 느낌. 이로인해, ip차단, 반응하기 전에 오류가 남.
# time.sleep("초") -> 해당하는 시간만큼 코드가 멈춤.
# 반드시 요청과 응답이 있는경우에 사용하는걸 권장함.
import time
try:
# 에러가 나기 전까지 실행 할 코드
for i in range(15):
btn = driver.find_element(By.CSS_SELECTOR,".c_05")
btn.click()
time.sleep(3) # 3초 쉬고 나서 다음 실행함. 반드시 요청과 응답 사이에 넣음.
except:
# 에러가 났을 때 실행 할 코드
print("더보기가 없습니다!")
수집된 요소를 텍스트 데이터만 추출
title_list=[]
price_list=[]
for i in range(len(title)):
title_list.append(title[i].text)
price_list.append(price[i].text)
title_list
< 한 셀에 코드 합치기 >
- 프로그램(실행파일) 제작할 때는, 반드시 코드를 한 cell에 합쳐야한다.
# 브라우저의 역할을 해주는 라이브러리 from selenium import webdriver as wb #컴퓨터용 키보드 불러오기 from selenium.webdriver.common.keys import Keys # 선택자의 구분자 역할을 해주는 라이브러리 from selenium.webdriver.common.by import By import pandas as pd import time # 1. 브라우저를 실행하고 -> 한솥 사이트로 이동 driver = wb.Chrome() driver.get("https://www.hsd.co.kr/menu/menu_list") time.sleep(5) try: # 에러가 나기 전까지 실행 할 코드 for i in range(15): btn = driver.find_element(By.CSS_SELECTOR,".c_05") btn.click() time.sleep(3) # 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 hansot.to_csv("한솥.csv", encoding ="euc-kr") #------------ 데이터 활용 단계 |
< 크롤링을 하는 프로세스 >
데이터 준비 -> 데이터 수집 -> 데이터 가공 -> 데이터 활용
- 데이터 준비 : 완벽한 데이터를 수집하기 위해서 화면 준비를 하는 단계 ( 더보기 버튼을 다 누르는 행위, 화면 스크롤을 최하단까지 이동 )
- 데이터 수집 : 준비된 데이터(html)에서 필요한 요소를 수집.
- 데이터 가공 : 수집된 데이터(요소)를 필요한 컨텐츠, 속성만 가공
- 데이터 활용 : 가공된 데이터를 표, 파일로 제작.
크롤링 TIP
- 반드시 selenium 을 활용할 때에는 'Cell Run All ' 을 금지한다!
- 항상 사람처럼 보이게 코딩을 작성하자.
- 요청과 응답 사이에는 반드시 시간을 부여.
- time.sleep : 무조건 내가 설정한 시간만큼 코드를 중단.
- implicitly.wait : 설정한 시간보다 완료된 시간이 짧으면 완료가 된 기점으로 진행됨.
- → 네트워크 환경이 좋을 때는 장점.
'Python' 카테고리의 다른 글
[Python] 네이버 지도 데이터 수집 (0) | 2023.08.29 |
---|---|
[Machine Learning] iris_knn분류실습 (0) | 2023.08.28 |
[Crawling] Selenium 라이브러리 (0) | 2023.08.28 |
[Python] pandas 추가 (0) | 2023.08.25 |
[Machine Learning] BMI 학습 (0) | 2023.08.25 |