스타벅스 메뉴 홈페이지의 메뉴와 모든 사진 링크를 크롤링 해보는 과제. 사실 과제라기 보다는 예습 차원에서 실시.
크롤링? : 웹 상 존재하는 컨텐츠를 긁어오는 것
무엇을 어떻게 크롤링할 것인지 미리 고민을 해보면 좋다.
import re # 정규표현식
import csv # csv 파일로 저장할 것이므로
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
# python 코드로 crhome 접속 가능하게 하는 것
# 필요한 기반 사항은 터미널에서 미리 설치한다.
filename = "starbucks.csv"
csv_open = open(
filename, "w+", encoding="utf-8")
csv_writer = csv.writer(csv_open)
# 쓰기 모드 완성
# 해석 : 파일 이름은 starbucks.csv로 할 것이고
파일을 열고 write하는데 인코딩 양식을 utf8로 할 것이다.
url = "https://www.starbucks.co.kr/menu/drink_list.do"
# 크롤링 할 페이지
browser = webdriver.Chrome("/Users/daminan/Downloads/chromedriver")
# 경로 설정 잘해주기. 가상환경이건 뭐건 상관 없음.
# 이 때 경로가 잘못 되면 아예 크롬창이 열리지 않음.
browser.get(url)
# python 코드로 crhome 접속 가능하게 하는 것
html = browser.page_source
# 소스 불러오기
bs = BeautifulSoup(html, 'html.parser')
# 파씽
product = bs.findAll("li", {"class" : "menuDataSet"})
# findAll로 menuDataSet, 여기가 그 홈페이지에 찾는 정보가 모두 있는 태그였음. 이 곳을 모두 긁어옴
for row in product:
img_tag = row.find('img')
img_url = img_tag['src']
drink = img_tag['alt']
csv_writer.writerow((drink, img_url))
# for loop 통해 img를 찾은 뒤 그 이미지의 인덱스를 활용하여 음료 이름과 링크 찾음. 이건 페이지마다 다를 수 있다. 이후 그 루프된 내용을 csv 파일 row에 저장.
csv_open.close()
browser.quit()
# 꼭 마지막에 file과 browser를 닫아줘야 한다.
# 과정이 완료되어 python starbucks.py 를 실행하면 알아서 창이 열리고 그 창에서 파싱을 한 뒤 csv값을 저장해준다.
기존에 알고 있던 뷰티플숩에서 셀레니움 사용법까지 같이 배웠다.(기존 것은 터미널창에 결과를 바로 보여주는 형식이었다면 이번에 배운 내용은 csv로 바로 만들어주기도 하고 셀레니움이라는 것도 처음 이용해 봄.)
셀리니움 경로, csv 파일 경로 등 절대, 상대 경로에 대한 이해가 많이 되었다.
find_all과 find 차이
추가로 공부할 사항 : 파일 불러오는 구조 좀 익숙해져야겠다. 알긴 알지만 익숙치 않다.