1) https://www.billboard.com/charts/hot-100
빌보드 차트 순위 100 사이트에서 순위, 곡, 아티스트 정보, 이미지를 BeutifulSoup/셀레니움으로 크롤링하는 코드를 작성해 보세요.
2) 크롤링 하여 sqlite3 db 또는 csv 파일에 저장하는 코드를 작성해 보세요.
웹 사이트를 분석하여 원하는 데이터를 추출하는 과정
입니다. 1)크롤링을 잘하기 위해서 알아야 할 것이 있습니다.
다음은 BeautifulSoup과 selenium을 이용한 과제입니다.
3.selenium
웹을 테스트하기 위한 프레임워크로, 정적인 BeautifulSoup과 다르게 동적으로 움직입니다. 그렇기에 브라우저를 제어할 수 있습니다.
selenium은 로그인이 필요한 웹 사이트나 자바스크립트로 동적으로 생성되는 웹 사이트의 데이터를 크롤링할 때 매우 유용하게 사용되는 스크래핑 도구라고 말할 수 있습니다.
코드:
from bs4 import BeautifulSoup
from selenium import webdriver #라이브러리에서 사용하는 모듈만 호출
import requests
import csv
import time
# setup Driver|Chrome : 크롬드라이버를 사용하는 driver 생성
driver = webdriver.Chrome('/home/jy/Documents/js/chromedriver')
driver.implicitly_wait(3) # 암묵적으로 웹 자원을 (최대) 3초 기다리기
#1. csv file open
csv_filename_to_write = "beverage_all.csv"
csv_open = open(csv_filename_to_write,'w+',encoding='utf-8')
csv_writer = csv.writer(csv_open)
csv_writer.writerow( ('name','image') )
#selenium
driver.get('https://www.starbucks.co.kr/menu/drink_list.do')
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
all = soup.select("[class~=menuDataSet]")
#bs4
for el in all: # el태그에 li태그에 넣기
name = el.find("dd").text #dd태그 안에 text만 뽑아오기
print(el.find("dd").text)
image = el.find("img")["src"]#img태그 안에 src 뽑아오기
print(el.find("img")["src"])
csv_writer.writerow( (name,image) )