본문 바로가기
  • 실행력이 모든걸 결정한다
Crawling

[크롤링, 예제 1-2] 예제 1 - 셀레니움(Selenium) 이용

by 김코더 김주역 2020. 10. 23.
반응형

 

예제1은 Selenium과 Drive 대신 urllib 라이브러리와 Beautifulsoup 모듈으로 크롤링을 했다.

Selenium과 Drive는 필수 사항이 아닐 뿐이지 충분히 이용할 수 있다. 이 포스팅에서는 예제1의 보충수업(?)으로 Beautifulsoup에 Selenium과 Drive를 추가로 이용하여 크롤링을 해볼 것이다.

 

이 포스팅에서는 아래 예제1 포스팅을 기반으로 설명할 것이다.

kimcoder.tistory.com/165

 

[크롤링, 예제 1] 문제풀이 사이트 정답율 추출하기

아래 포스팅을 읽지 않았다면 무조건 읽고 올 것을 권장한다. 설치법과 robots.txt같이 필수적으로 알아둬야 하는 개념이 필요하다. kimcoder.tistory.com/164 크롤링을 위한 준비과정 (Python, selenium, beautif

kimcoder.tistory.com

 

코딩 및 실행 결과

여러분들이 chromedriver을 설치한 경로를 webdriver.Chrome 생성자 에 넣어 driver 객체를 생성한다.

driver 개체 내부의 get 함수로 해당 웹사이트를 가져오고 페이지 소스를 담아오면 된다.

주의할점이 있다면 크롤링이 끝나기 전에, get함수에 의해 실행된 웹사이트를 닫으면 안된다.

가만히 기다리면 이전 포스팅과 같은 실행 결과가 나오게 된다.

urllib 라이브러리 방식보다는 실행 속도가 훨씬 느린 것을 느끼게 될 것이다.

Selenium은 계속 렌더링을 해주기 때문에 동적 크롤링에 적합한 것이며, 그만큼 속도도 느린 편인 것이다.

 

from selenium import webdriver
from time import sleep
from bs4 import BeautifulSoup
driver = webdriver.Chrome('C:\chromedriver\chromedriver.exe')
driver.get('https://www.acmicpc.net/problemset/1')
html = driver.page_source
#여기서 부터는 이전 포스팅과 동일
soup = BeautifulSoup(html,'html.parser')
ratetexts = soup.select('tbody tr td:nth-child(6)')
sum=0
for text in ratetexts:
  print(text.text[0:-1])
  sum+=float(text.text[0:-1])
length = len(ratetexts)
ACP = round(sum/(len(ratetexts)),3)
print('Size='+str(length))
print('Average Correct Percentage='+str(ACP)+'%')
반응형

댓글