왜 ? 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
'코딩공부 > Python Django' 카테고리의 다른 글
django secret key를 분실 or 노출될 경우 (0) | 2022.02.24 |
---|---|
숫자야구 게임 만들기 (0) | 2020.11.23 |
python schedule 라이브러리 사용하기 (0) | 2020.09.24 |
python으로 크롤링(crawling) 하기 (0) | 2020.09.22 |
os.path.isfile 함수를 이용한 secrets.json 관리하기 (1) | 2020.08.31 |