TIL/Python

[Python][Web Scraping] Selenium으로 웹스크래핑하기

탱! 2022. 5. 9. 15:34

Selenium : https://www.selenium.dev/

 

Selenium

Selenium automates browsers. That's it!

www.selenium.dev

셀레늄은 웹브라우저의 자동화를 사용하게 도와주는 라이브러리와 툴(도구,모듈 등)이다.

무슨 말인가 하면

 

사용자의 블라우저 사용을 모방할 수 있는 코드나 스크립트를 실행할수 있게 도와주는 확장프로그램이다.

예를 들면

실제 사용자처럼 검색창에 검색을 하고 스코롤을 내리고 하는 행위들을 코드로 작성해서 

실제 사용자가 아니라 컴퓨터가 코드를 실행해서 대신한다는 뜻이다.

 

주로 개발자들이 웹을 테스트 하는 목적으로 사용한다.

 

다양한 웹브라우저들이 있다.

크롬,엣지,파이어폭스,오페라,사파리 등

각 브라우저마다 다른 드라이버를 제공하는데

 

나는 크롬을 사용할 것이라 크롬 드라이버를 다운받았다.

다운받기전에 내 컴퓨터의 크롬버전이 무엇인지 확인하고 다운받는다.

 

라이브러리를 다운 받아야한다.

나는 파이썬을 이용할 것이라 터미널에 아래와 같이 설치 명령을 입력했다.

python3 -m pip install selenium

간단하게 사용해보자

from selenium import webdriver
driver = webdriver.Chrome("경로/chromedriver")
driver.get("https://www.google.com")
print(driver.title)
driver.close()
%  cd /Users/ ; /usr/bin/env /usr/local/bin/pyt
/Users/main.py:2: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
  driver = webdriver.Chrome("/Users//chromedriver")
Google

실행은 되는데 오래된 버전의 명령어라고 경고를 보낸다. 생략해도 되는건가? 해서 지우고 하면 또 경로가 필요하다고 한다. 

흠,,도와줘요!

 

여하튼 불러오는 것은 .get()을 이용하고 

웹브라우저를 종료할 때는 .close()와 .quit()을 쓸 수 있지만 quit은 전체 브라우저 종료이고 close은 한 웹페이지(탭)만 닫는다.

 

그런데 나는 웹스크랩핑이 어렵다.

이유는 bs4때도 그랬지만 원하는 정보를 html요소로 불러오는 것이 쉽지않아서 여러번 이걸로? 저걸로? 시도하다가 엉겹결에 성공하기 때문이다. 이때 오답과 왜 되었는지 파악하는 것이 중요할테지만 쉽지않다.

 

이래서 xpath을 사용하는 것 같다.

원하는 정보를 드래그한 후에 검사를 실행하고 복사를 누르면 copy xpath가 있다.

이것을 이용해서 텀블벅에서 후원하고 싶은 프로젝트의 타이틀을 콘솔에 출력해보자

from selenium import webdriver
driver = webdriver.Chrome("/Users/경로/chromedriver")

url = "https://tumblbug.com/crunchcard?ref=GNB%2F%EB%B3%B4%EB%93%9C%EA%B2%8C%EC%9E%84%20%C2%B7%20TRPG"
driver.get(url)

title =driver.find_element_by_xpath('//*[@id="react-view"]/div[3]/div/div/div[1]/div/h1')
print(title.text)
driver.quit()