-
Selenium으로 크롤링하기PROGRAMMING/Python 2021. 5. 11. 14:37반응형
크롤링은 크게 두가지 방법을 사용해서 행할 수 있다.
+ 둘 다 쓸 수도 있다.- BeautifulSoup 모듈을 이용하는 방법 (정적 크롤링)
- Selenium 모듈을 이용하는 방법 (동적 크롤링)
기본적으로는 정적 크롤링이 HTML DOM parsing을 통해 (특히 웹 프로그래밍을 해본 사람이라면) 리소스를 얻을 수 있기 때문에 더 쉽다. 하지만 순수 HTML이 아닌 JS로 이루어진 웹 페이지라면 BeautifulSoup만으로는 크롤링이 어렵다. 이 때 사용할 수 있는 동적 크롤링인 Selenium 모듈에 대한 사용법을 알아보자.
Selenium 설치 및 환경 구축
1. Selenium 모듈을 설치한다.
pip install selenium
2. Chrome 정보를 확인한 뒤, 여기에서 ChromeDriver-WebDriver for Chrome-를 설치한다. Selenium은 webdriver 실행 파일을 켠 상태에서 동적으로 크롤링하는 구조이기 때문에, 파이썬 스크립트 실행 시 webdriver가 켜져 있어야 한다.
처음 Selenium을 사용하게 되면 ... 과장 조금 보태서 내가 해커가 된 느낌이다. Chrome이 자동으로 열리고 닫히며, 키워드 입력 등 매크로를 사용할 수 있다. 나도 약간 놀랐다. \(〇_o)/
Selenium 예제
쉑쉑버거 포장하는 법
지금 쉑쉑버거가 너무 먹고싶어서, 네이버에 '쉑쉑버거 포장'을 검색하는 크롤러 예제를 만들어 보았다. 이 코드를 실행하면 마법 같게도 자동으로 근처 쉑쉑버거 포장 후기를 알려준다.
Selenium이 불안정한 건지, 처음에 잘 되다가 갑자기 CMD에서 USB 관련 warning이 자꾸 뜬다. 작동에 문제는 없지만 신경쓰여서 ChromeOptions 관련 코드도 추가하였다.
chromedriver는 소스코드와 같은 폴더에 있다고 가정하고 작성한 코드입니다.
import time from selenium import webdriver # option for USB warnings options = webdriver.ChromeOptions() options.add_experimental_option("excludeSwitches", ["enable-logging"]) browser = webdriver.Chrome(options=options) browser.get('https://www.naver.com/') time.sleep(2) search_box = browser.find_element_by_name('query') search_box.send_keys('쉑쉑버거 포장') search_box.submit() time.sleep(2) browser.quit()
Result:
네이버 로그인 하기
네이버 로그인이 너무 귀찮아서 자동 로그인 프로그램을 만들어 버렸다면?
from selenium import webdriver import time # option for USB warnings options = webdriver.ChromeOptions() options.add_experimental_option("excludeSwitches", ["enable-logging"]) user = "" passwd = "" if __name__ == "__main__": browser = webdriver.Chrome(executable_path="../webdriver/chromedriver.exe", options=options) browser.implicitly_wait(3) # enter the login page url_login = "https://nid.naver.com/nidlogin.login" browser.get(url_login) print("enter to login page...") e = browser.find_element_by_id("id") e.clear() e.send_keys(user) time.sleep(0.5) f = browser.find_element_by_id("pw") f.clear() f.send_keys(passwd) time.sleep(0.5) form = browser.find_element_by_css_selector("input.btn_global[type=submit]") form.click() print("clicking the login button..") time.sleep(5) # enter the shopping page browser.get("https://order.pay.naver.com/home?tabMenu=SHOPPING") products = browser.find_elements_by_css_selector(".p_info span") print(products) if len(products) > 0: for product in products: print("-", product.text) else: print("nothing to list.")
결과는 아쉽게도.. 선두 IT기업 답게 막혀있다. ㅠ
예제
책을 참고하여 github에 BeautifulSoup 및 Selenium의 몇몇 예제들을 작성해 보았다.
https://github.com/yerimJu/crawling_examples
참고 서적 : 파이썬을 이용한 머신러닝, 딥러닝 실전 개발 입문 / 위키북스 / 2017
Reference
https://oslinux.tistory.com/33
TroubleShootings
https://wkdtjsgur100.github.io/selenium-does-not-work-to-click/
https://hugssy.tistory.com/197
반응형'PROGRAMMING > Python' 카테고리의 다른 글
Python Programming : datetime ⇿ string 변환 (0) 2021.04.28 Algorithm 문제 해결에 Python을 사용해야 하는 이유 10가지 (0) 2021.03.14 파이썬을 이용한 사인 그래프 그리기 - Generating a Synthetic Sine Wave with Python (0) 2017.03.21