본문 바로가기

Python

파이썬으로 웹 크롤링하기 (Selenium 이용)

Selenium을 이용하여 크롤링을 해보자.

우선 설치부터 하겠다.

-> pip install selenium

또한 selenium을 사용하기 위하여 chromedriver을 설치 해주어야 한다.

먼저 자신의 크롬버전을 확인바란다.

chromedriver.chromium.org/downloads

 

Downloads - ChromeDriver - WebDriver for Chrome

WebDriver for Chrome

chromedriver.chromium.org

자신의 버전에 맞게 홈페이지에서 다운받자.

설치후 압축을 풀고 자신의 파이썬 워크스페이스에 옮겨주자

정상 설치후 화면

from selenium import webdriver

browser = webdriver.Chrome()
browser.get("http://naver.com")

코드를 입력하여 네이버브라우저를 열었을때

주소창 밑에 "Chrome이 자동화된 테스트 소프트웨어에 의해 제어되고 있습니다." 라고 뜬다. 잘 실행된 것이다.

 

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

browser = webdriver.Chrome()
browser.get("http://naver.com")

search_box = browser.find_element_by_id("query")
search_box.send_keys("오늘의 날씨")

search_btn = browser.find_element_by_id("search_btn")
search_btn.click()

실행화면

위 코드에서 주의깊게 볼건 browser.find_element_by_id이다.

by_id외에 

  • find_element_by_id
  • find_element_by_name
  • find_element_by_xpath
  • find_element_by_link_text
  • find_element_by_partial_link_text
  • find_element_by_tag_name
  • find_element_by_class_name
  • find_element_by_css_selector

이렇게 들어갈 수 있다.

네이트 자동로그인후 네이트 메일 제목들을 다 가져와보겠다.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

browser = webdriver.Chrome()
browser.get("https://www.nate.com/")

id_btn = browser.find_element_by_xpath("//*[@id='ID']")
id_btn.send_keys("YOUR ID")
time.sleep(0.5)
browser.find_element_by_id("PASSDM").send_keys("YOUR PASSWORD")
time.sleep(0.5)
browser.find_element_by_id("btnLOGIN").click()

  위 코드 실행결과

import requests
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from bs4 import BeautifulSoup

browser = webdriver.Chrome()
browser.get("https://www.nate.com/")

id_btn = browser.find_element_by_xpath("//*[@id='ID']")
id_btn.send_keys("YOUR ID")
time.sleep(0.5)
browser.find_element_by_id("PASSDM").send_keys("YOUR PASSWORD ")
time.sleep(0.5)
browser.find_element_by_id("btnLOGIN").click()
mail_btn = browser.find_elements_by_link_text("메일")
mail_btn[0].click()

time.sleep(0.5)
soup = BeautifulSoup(browser.page_source,"lxml")

mails = soup.find_all("a", attrs={"class" : "title"})
for mail in mails:
    print(mail.text)

원하는 정보를 정확히 파싱했다.