본문 바로가기
Python

파이썬 크롤링 selenium 네이버 검색 해보기, 한솥 도시락 메뉴 정보 수집

by wanttosleep1111 2023. 1. 21.

파이썬 크롤링 selenium 네이버 검색 기능해보기, 한솥 도시락 메뉴 정보 수집

 

셀레니움 (selenium) : 동적인 페이지(페이지를 바꾸지 않아도 바뀌는 내용들 네이버 광고, 날씨 등)의 데이터를 수집하기 위해 사용하는 라이브러리

 

ChromeDriver - WebDriver for Chrome

WebDriver is an open source tool for automated testing of webapps across many browsers. It provides capabilities for navigating to web pages, user input, JavaScript execution, and more. ChromeDriver is a standalone server that implements the W3C WebDriver

chromedriver.chromium.org

 

 

1. 네이버 검색 해보기

 

▶ 목표

  • 셀레니움을 이용해서 네이버 검색을 파이썬에서 해보기

 

① 셀레니움 라이브러리에서 webdriver를 불러오기 : webdriver.Chrome('주소/chromedriver.exe')

※ 주소가 치기 귀찮으면 chromedriver.exe 자체를 파이썬 문서 폴더에 같이 넣어버리기

크롬으로 네이버 접속 : .get('주소')

 

# 테스트 브라우저를 실행시키기 위한 라이브러리
from selenium import webdriver as wb

 

driver = wb.Chrome() # 브라우저 객체 생성(대소문자 조심)
driver.get('https://www.naver.com') # 브라우저 객체 실행

 

② 네이버 검색창 입력 태그 확인

 

③ 검색창 태그 정보 가져오기 : driver.find_element(by='', value='')

inputTag = driver.find_element(by='id', value='query')
inputTag

 

④ 입력창에 검색어 보내 보기 : .send_keys('검색어\n')

inputTag.send_keys('eat sleep code repeat\n')

 

⑤ 검색 명령 버튼 태그 정보 가져오기

buttonTag = driver.find_element(by='id', value='search_btn')

 

⑥ 검색창에 검색어를 입력하고 검색 명령 버튼을 클릭하기 : .click()

inputTag.send_keys('eat sleep code repeat')
# 검색 버튼을 클릭하기
buttonTag.click()

 

⑦ 페이지 뒤로 가기 및 브라우저 종료

# 페이지 뒤로가기
driver.back()
# 브라우저 종료
driver.close()

 


 

2. 한솥 도시락 메뉴 정보 수집

 

▶ 목표

  • 한솥 도시락 > MENU > 전체 메뉴의 모든 메뉴 이름, 가격을 수집하기
  • 수집한 데이터를 엑셀 파일로 저장해보기

 

① 한솥 도시락의 메뉴 페이지 확인

메뉴 페이지가 한번에 모두 나오는 것이 아니라 더보기를 여러 번 클릭해야 메뉴를 전부 확인 가능

 

② 더보기 버튼 태그 정보 확인하고 더보기를 계속 눌러 줄 수 있는 반복문 작성

  • 반복문을 이용해서 자동으로 클릭 실행
  • 클릭의 횟수를 알 수 없기 때문에(while) 예외 처리 필요 (try~except)
  • 오류가 발생하는 코드 영역만 try문에 넣어서 예외처리

 

while True :
    try :
        nextBtn.click()
    except :
        print('모든 더보기 클릭 완료')
        break

 

 

 

② 메뉴 이름, 가격 태그 확인

 

③ 셀레니움을 이용해 한솥 도시락 전체 메뉴 페이지를 열고, 더보기 버튼을 모두 클릭하여 모든 메뉴의 이름과 가격을 수집하기

driver = wb.Chrome()
driver.get('https://www.hsd.co.kr/menu/menu_list')
nextBtn = driver.find_element(By.CSS_SELECTOR, 'a.c_05') # 더보기 버튼 접근
while True :
    time.sleep(1) # 1초 간격으로 실행 딜레이를 주기
    try :
        nextBtn.click()
    except :
        print('모든 클릭 완료')
        break
name = driver.find_elements(By.CSS_SELECTOR, '.h.fz_03') # 메뉴 이름 접근
price = driver.find_elements(By.CSS_SELECTOR, '.item-price strong') # 메뉴 가격 접근
menu_lst = [[name[i].text,price[i].text] for i in range(len(name))]
menu_lst

 

④ 모든 메뉴 이름, 가격이 있는 리스트를 DataFrame 형태로 만들고 엑셀 파일로 저장하기

menu_df = pd.DataFrame(menu_lst, columns=['메뉴','가격'])
display(menu_df)
menu_df.to_excel('./한솥도시락메뉴.xlsx')

 

댓글