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 |
댓글