이번시간에는 스타벅스 음류수 총 매뉴를 크롤링 해보겠습니다.
해당 문서는 글쓴이가 문법이 해깔리거나 패턴이 해깔릴 경우를 위해 작성하였으므로 가독성이 없을 수 있습니다 .
import requests
import csv
from bs4 import BeautifulSoup
from selenium import webdriver
1. (request) html 소스 불러오기
2. (csv) csv파일 생성
3. (bs4) 크롤링 도구
4. (selenim) 웹 드라이버
지난 시간에 웹 드라이버를 사용하지 않고 크롤링을 했는데요 스타벅스는 웹 드라이버를 사용해서 크롤링 하겠습니다.
Why 웹드라이버를 사용할까??
selenium은 동적 페이지를 분석하는데 사용하고
bs4는 정적 페이지를 분석하는데 사용합니다.
selenium는 bs4보다 느리니 상황에 맞게 쓰시면 됩니다.
def main():
# 방법 1
# menu_lists = soup.select(".product_list dl dd ul li dl dt a")
# 방법2
menu_lists = soup.find_all("a", {"class": "goDrinkView"})
for menu in menu_lists:
star_menu.append(getMenuInfo(menu))
csv_save(star_menu)
if __name__ == "__main__":
URL = "https://www.starbucks.co.kr/menu/drink_list.do"
star_menu = []
# 크롭 headless모드
chrome_option = webdriver.ChromeOptions()
chrome_option.add_argument("headless")
chrome_option.add_argument("-disable-gpu")
chrome_option.add_argument("lang-=ko_KR")
# 크룸 실행
dr = webdriver.Chrome("./chromedriver", chrome_options=chrome_option)
# URL 소스 가져오기
dr.get(URL)
html_code = dr.page_source
# 분석하기 쉽게 bs4로 변환
soup = BeautifulSoup(html_code, "html.parser")
main()
0. __main__부터 보시면됩니다.
1. 언제나 글쓴이의 패턴의 그렇듯이 URL변수와 데이터 리스트를 만듭니다.
2. 그냥 크롬 headliess모드는 백그라운드에서 크롬을 동작시키도록 하는 option 입니다.
3. 크롬 실행을 하기위해 webdriver.Chrome함수를 실행시킵니다.
https://chromedriver.chromium.org/downloads(다운로드 링크)
본인 크롬의 버전을 확인하고 위 사이트에서 맞는 버전을 설치하세요..
최신버전 무저건 다운받기 No!!
4. 스타벅스 사이트의 Html 소스를 가져옵니다.
5. 분석하기위해 bs 선언
6. __mian__ 함수
7. 방법1 로도 데이터를 가져올수 있고 방법2로도 할 수 있으니 취양것 사용 하시기 바랍니다.
8. 하나의 덩어리를 찾아 find_all() for문으로 find_all()로 찾은 덩어리를 반복합니다.
9. list에 데이터를 append 합니다.
# 매뉴 가져오기
def getMenuInfo(menu):
name = menu.find("img")["alt"]
img_Url = menu.find("img")["src"]
return {"name": name, "img_Url": img_Url}
img 태그의 alt속성과 src속성을 리턴 하는 함수 입니다.
스타벅스의 음류 이름과 이미지 URL을 가져옵니다.
# csv로 변환
def csv_save(star_menu):
f = open("star.csv", "w", encoding="utf-8", newline="")
wr = csv.writer(f)
wr.writerow(["이름", "URL"])
for Info in star_menu:
wr.writerow([Info["name"], Info["img_Url"]])
f.close()
이전 글에 했던 빌보드 차트와 동일한 로직이므로 설명은 생력하겠습니다.
전체 코드
import requests
import csv
from bs4 import BeautifulSoup
from selenium import webdriver
URL = "https://www.starbucks.co.kr/menu/drink_list.do"
star_menu = []
# 크롭 headless모드
chrome_option = webdriver.ChromeOptions()
chrome_option.add_argument("headless")
chrome_option.add_argument("-disable-gpu")
chrome_option.add_argument("lang-=ko_KR")
# 크룸 실행
dr = webdriver.Chrome("./chromedriver", chrome_options=chrome_option)
# URL 소스 가져오기
dr.get(URL)
html_code = dr.page_source
# 분석하기 쉽게 bs4로 변환
soup = BeautifulSoup(html_code, "html.parser")
# 매뉴 가져오기
def getMenuInfo(menu):
name = menu.find("img")["alt"]
img_Url = menu.find("img")["src"]
return {"name": name, "img_Url": img_Url}
# csv로 변환
def csv_save(star_menu):
f = open("star.csv", "w", encoding="utf-8", newline="")
wr = csv.writer(f)
wr.writerow(["이름", "URL"])
for Info in star_menu:
wr.writerow([Info["name"], Info["img_Url"]])
f.close()
def main():
# 방법 1
# menu_lists = soup.select(".product_list dl dd ul li dl dt a")
# 방법2
menu_lists = soup.find_all("a", {"class": "goDrinkView"})
for menu in menu_lists:
star_menu.append(getMenuInfo(menu))
csv_save(star_menu)
if __name__ == "__main__":
main()
추출후 결과는 저작권 문제로 출력하지 않겠습니다.
결과 같은 이전 빌보트 차트한 결과와 동일하니 이전 글을 보시기 바랍니다.
'Python' 카테고리의 다른 글
[Python] 자료구조 Set, Dictionary (0) | 2020.07.13 |
---|---|
[Python] 자료구조 Tuple,Array (0) | 2020.07.06 |
[Python] 크롤링-billboard 차트 - csv (0) | 2020.07.02 |
[Python] asyncio (0) | 2020.07.02 |
[Python] coroutine (코루틴) (1) | 2020.06.29 |
댓글