웹크롤링 1

이지연·2020년 8월 5일
0

1) https://www.billboard.com/charts/hot-100
빌보드 차트 순위 100 사이트에서 순위, 곡, 아티스트 정보, 이미지를 BeutifulSoup/셀레니움으로 크롤링하는 코드를 작성해 보세요.
2) 크롤링 하여 sqlite3 db 또는 csv 파일에 저장하는 코드를 작성해 보세요.

  1. 웹 크롤링이란 무엇인가?
    간단히 말해서, 웹 사이트를 분석하여 원하는 데이터를 추출하는 과정 입니다.

1)크롤링을 잘하기 위해서 알아야 할 것이 있습니다.

  • 크롤링 코드를 작성하기전 내가 크롤링할 데이터를 명확히 정의하고 접근하는 것이 좋습니다.
  • 개발자도구를 사용해서 반복적인 태그의 패턴을 찾거나 css선택자를 활용할 수 있는 검토한다.

다음은 BeautifulSoup과 selenium을 이용한 과제입니다.

  1. BeautifulSoup
    BeautifulSoup를 이용해 파싱하여 유의미한 데이터만 뽑을 수 있습니다.

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) )
profile
Everyday STEP BY STEP

0개의 댓글