Python - Selenium으로 크롤링하기

whybein·2020년 2월 14일
2

Python

목록 보기
7/7
post-thumbnail

웬만하면 BeautifulSoup을 이용해 크롤링 할 수 있으면 좋지만 안되는 경우도 가끔 있습니다. 기생충 리뷰에 이어 오스카 홈페이지에서 수상자 명단을 크롤링 해보려 했지만 html에 텍스트 자체가 나오지 않아 브라우져 자동화 툴인 셀레니움을 이용해 봤습니다.

 

1. 셀레니움 및 웹드라이버 설치

 

- 셀레니움 설치

pip install selenium

 

- 웹드라이버 설치

크롬 버전에 해당하는 웹드라이버를 여기에서 다운받아 사용할 경로를 지정해 저장합니다. 기본적인 동작에 대해서는 여기의 파이썬 코드를 통해 확인할 수 있습니다. chromedriver는 폴더가 아니라 파일명입니다. 최종폴더 뒤에 확장자 없는 파일명을 붙여주면 됩니다.

import time
from selenium import webdriver

driver = webdriver.Chrome('/path/to/chromedriver')
# 웹드라이버 실행 경로 chromedriver는 폴더가 아니라 파일명입니다.
driver.get('http://www.google.com/');   	# 구글에 접속
time.sleep(2)					# 2초간 동작하는 걸 봅시다
search_box = driver.find_element_by_name('q')   # element name이 q인 곳을 찾아
search_box.send_keys('ChromeDriver')		# 키워드를 입력하고
search_box.submit()				# 실행합니다.
time.sleep(2)					# 2초간 동작하는 걸 봅시다
driver.quit()					# 다 했으면 꺼야지

 


2. 오스카 2020 수상자 명단 크롤링하기

 

Selenium으로 페이지 소스를 가져오고 앞서 사용했던 방식으로 BeautifulSoup을 이용해 원하는 항목을 가져옵니다. 아래는 전체 코드입니다.

 

import time
import pandas as pd

from selenium import webdriver
from bs4 import BeautifulSoup

driver = webdriver.Chrome('/home/whybein/Downloads/chrome_driver/chromedriver')  # Optional argument, if not specified will search path.
driver.get('https://oscar.go.com/winners');
time.sleep(1)

html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')

category = soup.select(
    'bls-winners-list > ul > li > div.winners-list__info > a'
)
movie = soup.select(
    'bls-winners-list > ul > li > div.winners-list__info > h3 > a'
)
producer = soup.select(
    'bls-winners-list > ul > li > div.winners-list__info > p'
)

oscars_2020 = []
for item in zip(category, movie, producer):
    oscars_2020.append(
        {
            'category' : item[0].text,
            'movie'    : item[1].text,
            'producer' : item[2].text
        }
    )

data = pd.DataFrame(oscars_2020)
print(data)
data.to_csv('oscars_2020.csv')
    
driver.quit()
profile
Back-End Developer

0개의 댓글