코딩공부/Python Django

python selenium을 이용한 크롤링

integerJI 2020. 9. 27. 12:16

왜 ? Selenium을 사용하는가

 

github에서 그날 커밋한 data-count가 0일 경우 알람을 보내주는 기능을 개발하는 중

 

일반적으로 requests를 사용해

 

 

데이터의 짝이 안맞는 현상을 발견

 

원인과 해결 방법

js 렌더링을 통해 데이터를 가져올 경우 request에 값이 안담겨 있다는 정보를 확인 후 Selenium을 통해 chrome을 직접 열어 데이터를 가져오면 되지 않을까? 라는 생각에 Selenium을 사용하게 되었습니다.

 

 

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

pip install selenium

 

pip를 이용해 selenium을 설치하여 줍니다. (저는 이미 설치하였습니다.)

 

이제 해당 사이트 sites.google.com/a/chromium.org/chromedriver/downloads에서 웹 드라이버를 다운받아 줍니다.

 

현재 2020.09.27 기준 

 

 

86, 85, 84버전이 있으며 자신이 설치한 크롬 버전과 동일한 버전을 다운받아 줍니다.

 

chrome://version/ 를 입력하여

 

 

자신에 맞는 버전을 다운받아 설치하여 줍니다.

 

 

다운받은 zip파일의 압축을 풀어 줍니다.

 

 

 

셀레니움 실행하기

from selenium import webdriver
from bs4 import BeautifulSoup

# chromedriver가 설치되어있는 경로
driver = webdriver.Chrome(r'C:\Users\kas23\Downloads\chromedriver.exe')
# driver에 git url을 입력
driver.get('https://github.com/integerJI');

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

category = soup.select('svg > g > g > rect')

for a in category:
    date = a.attrs['data-date']
    count = a.attrs['data-count']
    print(date, ":", count)

# driver을 닫아준다.
driver.quit()

 

해당 소스를 실행해 보면

 

webdriver을 이용해 자신의 "chromedriver.exe"를 실행시켜 줍니다.

 

그렇게 되면 새로운 크롭창이 열리게 되어 주소에 설정한 경로로 이동하게 되고

 

해당 페이지에서 BeautifulSoup를 이용해 웹 크롤링을 해줍니다.

 

 

결과

 

결과적으로는 아직 github의 데이터를 다 가져오지 못하였습니다.

이유 --> integer-ji.tistory.com/322

 

하지만 이러한 data값을 가져오는게 아니라

 

일반적인 text를 가져온다면 requests로 못가져오는 값을 selenium을 통해 가져올 수 있습니다.

 

도움을 받은 사이트 링크입니다.

참고 : velog.io/@swhybein/Python-Selenium%EC%9C%BC%EB%A1%9C-%ED%81%AC%EB%A1%A4%EB%A7%81%ED%95%98%EA%B8%B0