웹크롤링2

이지연·2020년 8월 5일
0

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

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
from urllib.request import urlopen
import csv
import time
import cssutils

# csv저장
output = 'crawling_top100.csv'
csv_open = open(output, 'w+', encoding='utf-8')
csv_writer = csv.writer(csv_open) #파일 객체에 넣기
csv_writer.writerow(('rank','song','artist', 'image_url')) #writerow 메서드를 통해 각 변수에 데이터를 추가

# setup Driver|Chrome : 크롬드라이버를 사용하는 driver 생성
driver = webdriver.Chrome('/home/jy/Documents/js/chromedriver')
driver.implicitly_wait(10) # 암묵적으로 웹 자원을 (최대) 10초 기다리기
#time.sleep과 비교: 프로세스 자체를 지정한 시간동안 기다려주는 역할, 무조건 지연된다

driver.get('https://www.billboard.com/charts/hot-100') # 빌보드차트 접속

body = driver.find_element_by_css_selector('body') # send_keys()메서드 사용을 위한 body가져오기
for i in range(20):
    body.send_keys(Keys.PAGE_DOWN)
    time.sleep(0.1)

#메서드를 이용해서 엔터키 값을 전달하는 방법, 마우스 클리과 동일한 효과를 낼 수 있다.


# beautifulsoup 사용 하기 준비
html = driver.page_source # html을 문자열로 가져온다.
driver.close() # 크롬드라이버 닫기
soup = BeautifulSoup(html, 'html.parser') # BeautifulSoup사용하기

top100 = soup.find_all('button', class_='chart-element__wrapper')

for el in top100:
    style = cssutils.parseStyle(el.find("span", class_="chart-element__image")["style"]) # cssutils.parseStyle 딕셔너리 형식으로 파싱하는 것
    url = style['background-image'][4:-1] # style에 ['background-image']의 인덱스 4부터 끝값을 뽑아서 url에 넣어줌
    rank = el.find("span", class_="chart-element__rank__number").text 
    song = el.find("span", class_="chart-element__information__song").text
    artist = el.find("span", class_="chart-element__information__artist").text
    csv_writer.writerow((rank,song,artist, url))```
profile
Everyday STEP BY STEP

0개의 댓글