TIL 스타벅스 웹 크롤링

finelinefe·2020년 9월 7일
0

CRAWLING

목록 보기
2/2
post-thumbnail

스타벅스 코리아에서 모든 음료의 제목과 이미지를 크롤링해서 csv 로 저장해 올려주세요


How to?

내가 이해한게 맞는지는 모르지만 나는 이렇게 이해했다.

  • 터미널 상에서 크롤링 프로젝트를 담을 폴더 mkdir 생성
  • 생성 후 그 폴더로 이동(cd 폴더명), 콘다 뉴프로젝트, 콘다 액티베이트, 뷰티풀수프, 셀레늄, request 설치
  • vs code 오픈 후 해당 경로 폴더 안에 크롤링 명하는 파이썬 파일 작성
  • 작성 후 저장한 뒤 터미널에서 'python 폴더명.py' 입력 후 실행(자동으로 csv 생성)



파이썬

# import time
from bs4 import BeautifulSoup
from selenium import webdriver
import csv
import re
# from webdriver_manager.chrome import ChromeDriverManager


filename = "starbucks_crawling.csv"
csv_open = open(filename, "w+", encoding='utf-8')
csv_writer = csv.writer(csv_open)


url = "https://www.starbucks.co.kr/menu/drink_list.do"

#경로수정
# browser = webdriver.Chrome()
#에러발생selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.
# 경로문제수정은 직접 폴더에서 path 써줘야함
browser = webdriver.Chrome('/home/ksh/crawling/chromedriver')
browser.get("https://www.starbucks.co.kr/menu/drink_list.do")



browser.implicitly_wait(5)
html = browser.page_source



bs = BeautifulSoup(html, 'html.parser')

drinks_wrapper = bs.findAll(
    "li", {"class": re.compile("menuDataSet")})
for row in drinks_wrapper:
    img_tag = row.find("img")
    img_url = img_tag['src']
    title = img_tag['alt']
    csv_writer.writerow((title, img_url))

csv_open.close()
browser.quit()



생성된 csv 파일

시간만 나면 다시해 볼 예정. 너무 어렵다......

  • 참고로 스타벅스의 경우 정적 페이지인줄 알고 뷰티풀수프로만 크롤링 하려고 한다면 안된다. 셀레늄까지 해야 되는거였다.. 자세한 이유까진 모르지만... 그냥 그렇다고 한다.

내 머릿속 개념

뷰티풀수프 = 정적페이지 크롤링할때
셀레늄 = 동적페이지 크롤링할때
뷰티풀수프+셀레늄 = 둘다 섞인 페이지 크롤링 할때?


import csv
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
import time
driver = webdriver.Chrome(ChromeDriverManager().install())

driver.get('https~ 주소')
기본적인 웹 드라이버 불러오기 

3개의 댓글

comment-user-thumbnail
2020년 9월 7일

쉽게 설명하자면,
뷰티풀 수프는 정확히는 HTML 과 같은 문서를 파싱하는 파서 라이브러리이구요.
셀레늄은 다운로드 하는 라이브러리라고 보시면 됩니다.

따라서 뷰티풀 수프 단독으로 쓸 수는 없고 크롤링을 할 때 requests 나 urllib 와 같이 웹 페이지를 다운로드 할 수 있는 라이브러리를 사용해서 HTML, XML 과 같은 문서를 얻고 이 문서를 파싱할 때 뷰티풀 수프를 사용하면 원하는 dom 객체로 접근 할 수 있는 것 입니다.

requests 나 urllib 는 동적 페이지는 다운로드할 수 없고 (정적 페이지 다운로드 가능) 따라서 동적 페이지를 크롤링하기 위해서는 셀레늄을 사용합니다. (셀레늄은 보통 브라우저 테스팅할 때 사용할 수 있는데, 가상 브라우저를 사용해서 브라우저인 척? 동적 페이지를 가져올 수 있습니다.)

그래서 마지막 코드에서 되는 이유는 셀레늄을 이용해서 동적 html 을 가져오고 이 html 을 뷰티풀 수프로 파싱 했기 때문에 가능한 것입니다.

즉 다운로드(Selenium) -> 다운로드 한 페이지를 파싱 (BeautifulSoup)

requests, urllib == selenium 과 같이 대치 되는 것입니다.

1개의 답글