TIL - Web Crawling 2

KDG·2020년 6월 20일
0

스타벅스 메뉴 크롤링

from bs4 import BeautifulSoup
from selenium import webdriver
import csv

# csv 파일로 저장하기
csv_filename_to_wirte = "starbucks_menu.csv"
csv_open = open(csv_filename_to_wirte, 'w+', encoding='utf-8')
csv_writer = csv.writer(csv_open)
csv_writer.writerow( ('category','name','description','image') )

# 셀레니움 사용
dr = webdriver.Chrome()
dr.implicitly_wait(3)
main_URL = "https://www.starbucks.co.kr/menu/drink_list.do"
menu_URL = "https://www.starbucks.co.kr/menu/drink_view.do"
dr.get(main_URL)  # 크롬드라이버에 url을 적용해준다.
html = dr.page_source  
bs = BeautifulSoup(html, 'html.parser')



starbucks_menu = bs.findAll('li',{'class':'menuDataSet'})
for drink in starbucks_menu:
    try:
        prod_id = drink.find('a')['prod']  # for문을 돌려 prod값을 찾아낸다.
        menu_id = f"?product_cd={prod_id}" # 찾아낸 prod값을 ?product_cd=와 붙인다. 
        dr.get(menu_URL+menu_id) # menu_URL와menu_id 붙인 url을 크롬드라이버에 적용해준다.
        menu_html = dr.page_source
        menu_bs = BeautifulSoup(menu_html, 'html.parser')
        category = menu_bs.find('div',{'class':'sub_tit_inner'}).find('img')['alt']  # 카테고리 크롤링
        name = menu_bs.find('h4').text  # 이름 크롤링
        description = menu_bs.find('p',{'class':'t1'}).text  # 설명 크롤링
        image = menu_bs.find('a',{'class':'elevatezoom-gallery active'}).find('img')['src']  # 이미지 크롤링
        csv_writer.writerow( (category,name,description,image) )  # 크롤링한 내용 csv파일에 넣기

    except:
        continue  # 에러가 발생하면 다음거 계속 진행


csv_open.close()

에러발생시 예외는 여러가지 상황이있어서 그 해당 에러를 발견하고 각각의 에러에 맞게 적용시켜줘야한다.
하지만 일단은 저렇게 작성했다.ㅋㅋㅋ

1개의 댓글

comment-user-thumbnail
2020년 6월 20일

동건님 5시간 전에 크롤링 공부하셨네요. 전 지금 시작할게요 화이팅! (by.hl)

답글 달기