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

[크롤링, 예제 1-3] Selenium - 새 창 안띄우고 크롤링 하기

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

 

저번 포스팅에서의 Selenium 예제에서는 get함수에 의해 새 창이 실행되고, 크롤링 도중에 그 창을 지우면 크롤링이 진행되지 않는다.

<저번 포스팅>

kimcoder.tistory.com/166

 

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

예제1은 Selenium과 Drive 대신 urllib 라이브러리와 Beautifulsoup 모듈으로 크롤링을 했다. Selenium과 Drive는 필수 사항이 아닐 뿐이지 충분히 이용할 수 있다. 이 포스팅에서는 예제1의 보충수업(?)으로 Bea

kimcoder.tistory.com

 

이번 포스팅에서는 Selenium 사용 시 새 창을 안띄우고 크롤링하는 방법을 소개한다.

저번 포스팅의 코드와 달라진 부분은 4~8번째 줄이다.

chrome_options 객체를 만들어서 driver를 headless 방식으로 세팅하면 된다.

그리고 webdriver.Chrome 생성자의 2번 째 인자로 chrome_option 객체를 넣어주면 driver 설정이 끝난다.

이렇게 다섯줄만 바꿔주면 크롤링 시 새 창을 숨길 수 있게 된다.

실행 결과는 역시 달라지지 않지만 실행속도는 여전히 느리다.

 

 

boj3.py 파일을 실행하니까 여러 문장이 뜬 뒤 5초가 넘어서야 결과가 출력되었다.

실행 속도 차이 -> urllib 이용 (약 1.5초) < Selenium+driver(약 5~6초)

Selenium의 속도가 느린 이유는 저번 포스팅에서도 말했듯이 렌더링 때문이다.

 

from selenium import webdriver
from time import sleep
from bs4 import BeautifulSoup
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('lang=ko_KR')
driver = webdriver.Chrome('C:\chromedriver\chromedriver.exe',chrome_options=chrome_options)
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)+'%')
반응형

댓글