Hun's Blog

[Python] 웹 크롤링 5 - selenium을 활용한 유튜브 키워드 검색하기 본문

Language/Python

[Python] 웹 크롤링 5 - selenium을 활용한 유튜브 키워드 검색하기

jhk-im 2020. 4. 6. 11:16

참고

파이썬 레시피 - 웹 활용 입문편을 공부하면서 정리한 내용

https://wikidocs.net/36472

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

유튜브에서 자동으로 키워드를 입력하고 검색해보자. 

자동화를 위해선 python의 selenium 모듈이 필요하다. 

유튜브는 크롬 웹브라우저에 최적화되어있기 때문에 크롬을 설치해야한다. 

추가로 크롬 드라이버도 설치한다. 

 

selenium?
다양한 브라우저 및 플랫폼에서 웹 응용프로그램을 위한 자동화 테스트 스위트이다.
웹 기반 응용 프로그램을 자동화하는 데 중점을 둔다.
단 하나의 도구가 아니라 소프트웨어의 모음이다.
여러 언어에서 웹 자동화 테스트 및 웹 자동화를 도와주는 라이브러리이다.

 

 

chrome driver?

크롬드라이버는 selenium webDriver가 Chrmoe을 제어하는 데 사용하는 별도의 실행파일이다. 

webDriver 기고자의 도움을 받아 Chromium 팀에서 관리한다. 

 

1. 설치

1-1 selenium 설치

sudo apt-get update 
sudo pip3 install selenium

 

1-2 크롬 설치 

sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -

->인증키 등록 

sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ " >> /etc/apt/sources.list.d/google.list'

->크롬 브라우저 다운받을 PPA 추가 (/etc/apt/sources.list.d) 

sudo apt-get update

->PPA 추가 후 apt-get update 하여 리스트 갱신 

sudo apt-get install google-chorme-stable

->크롬 브라우저 설치 

sudo rm -rf /etc/apt/sources.list.d/google.list

-> 설치완료후 google.list 파일 삭제 

sudo apt-get clean

-> apt manager 가 다운 받은 설치파일을 삭제 

sudo apt-get update

-> apt-get update 로 정상적으로 설치되었는지 확인 

 

1-3 크롬 드라이버 설치
google-chrome --version

-> 크롬 버전확인 sudo wget https://chromedriver.storage.googleapis.com/80.0.3987.106/chromedriver_linux64.zip

-> 버전에 맞는 크롬 드라이버 다운로드 

sudo unzip chromedriver_linux64

-> 크롬 드라이버 압축풀기 

sudo mv chromedriver /var/www/html/pythonTut/basic
sudo chown root:root /var/www/html/pythonTut/basic

-> 크롬 드라이버 이동하여 실행 권한 주기 

sudo chmod +x /var/www/html/pythonTut/basic

-> 자동화를 위해 chromedriver와 파이썬 파일을 같은 폴더에 놓는다. 

 

 

2. 스크립트 작성 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from selenium import webdriver
import time
from selenium.webdriver.support.ui import WebDriverWait
 
driver = webdriver.Chrome('chromedriver')
 
wait = WebDriverWait(driver,10)
 
search = driver.find_element_by_name('search_query')
 
search.send_keys('we bare bears')
 
search.send_keys(Keys.ENTER)
 

2-1 driver = webdrive.Chrome('chromedriver')

-> webdriver의 Chrome() 메소드에 다운받은 크롬드라이버를 입력하여 자동화를 위한 셋팅을 한다. 

-> driver 라는 변수에 담는다.

-> drvier 는 .get() 메소드를 사용할 수 있게되고 인자값으로 자동화를 진행할 페이지의 url을 입력한다. 

-> 완료되면 크롬 드라이버가 직접 크롬 브라우저를 열어 해당 url 페이지를 자동으로 열람한다.  

크롬 브라우저 youtube 메인 페이지 자동열람 

 

2-2 wait = WebDriverWait(driver,10) 

from selenium.webdriver.support.ui import WebDriverWait

-> selenium 도구모음에서 webdriver에 support.ui 에 있는 WebDriverWait 메소드를 import 하고있다. 

   -> 여기서 selenium의 존재이유를 확인할 수 있다. 

   -> 단순히 http request를 보내면 데이터가 완전히 로딩되기 전에 보내져 빈 껍데기가 오는 경우가 있다.

   -> 원하는 데이터가 완전히 로딩될때까지 기다렸다가 온전한 데이터를 받기위해 selenium을 사용한다. 

-> WebDriverWait() 에 크롬드라이버와 time 을 입력한다.

   -> 10초 내에 해당 드라이버의 정보를 찾으면 반환하고 그렇지 않으면 timeoutd이 발생한다. 

   -> 명시적인 페이지 로드 대기에 사용된다. 

 

2-3 time.sleep(3)

-> time 모듈은 시간을 다루는 단순하지만 다양한 기능을 제공하는 모듈이다.

-> time 모듈의 sleep()메소드를 사용하여 시간을 입력하면 지정 시간동안 프로세스를 일시정지 할 수 있다. 

 

2-4 search = driver.find_element_by_name('search_query')

-> webdriver의 find_element_by_name() 메소드에 name 이 'search_query'인 태그를 찾아온다. 

-> 찾아온 태그를 search 라는 변수에 담는다. 

아래 이미지를 보면 name이 search_query인 태그는 input -> 검색창 이라는 것을 알 수 있다. 

name = "search_query" = 검색창

2-5 search.send_keys('we bare bears')

-> search에 담긴 태그에 webdriver의 send_keys() 메소드에 데이터를 입력하여 전송할 수 있다. 

input 태그에 'we bare bears' 전달 

 

2-6 search.send_keys(Kyes.ENTER) 

from selenium.webdriver.common.keys import Keys

-> selenium 도구모음의 webdriver.common.keys 모듈의 Keys() 메소드를 가져온다. 

-> Keys() 메소드는 키보드 각각의 key를 상수로 지정해두고 있다. ex)Keys.ENTER, Keys.SPACE 

-> send_keys() 메소드에 Keys(Keys.ENTER)  를 입력하여 전송한다. 

-> 전달받은 크롬 드라이버 측에서는 ENTER 를 누르라는 것으로 판단하여 Enter를 자동으로 눌러 검색을 진행한다. 

 

검색버튼을 눌러 검색진행