<aside> 💡 데이터의 갱신이 실제 서비스에 반영되는데 걸리는 시간은 서비스의 품질을 의미한다.
</aside>
편의점 할인 행사 품목은 하루에 한번 자정에 변경된다. 따라서, 매일 자정에 해당 정보를 수집해야 우리 서비스가 제대로된 할인 정보를 수집할 수 있다. 데이터의 원천이 우리 서비스가 아니기 때문에, 이를 수집하는데 시간 차이가 발생하게 된다. 서비스의 품질을 올리기 위해서는 이 시간 차이를 최대한 작게 하는 것이 중요하다.
개선 전 모듈의 동작 속도 : 총 30분이 걸린다.
기존 모듈이 동작을 완료할 때 까지 30분이 걸렸다.
<aside> 💡 서비스가 제대로 동작하지 않는 상황이 30분이상 지속될 가능성을 의미한다.
</aside>
아래 코드는 기존 모듈의 python 코드의 일부분이다.
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
기존 모듈이 크롤링하는 웹 페이지들은 모두 동적생성된 웹 페이지다. 즉, 뼈대가 되는 HTML, CSS, JS 파일을 서버에서 불러온 뒤, 실제 데이터는 별도의 HTTP 통신을 통해 가져와 DOM을 수정하는 형태로 제공되는 웹 페이지다. 따라서, 단순한 정적 크롤링으로 데이터를 수집할 수 없다.
보통 이런 웹사이트를 크롤링할 때는 브라우저의 드라이버
를 사용해 사람이 브라우저를 사용하는 행동을 모방하여 데이터를 수집한다. 쉽게 말해, 클릭 매크로의 기능이 정적 크롤링에 추가된 방식이다.
<aside> 💡 cli 기반의 웹 브라우저와, 드라이버가 있다면 가능하지만, 찾아보기 힘들다. 대부분의 동적 크롤링의 경우 구글의 크롬 브라우저, Mac 의 Safari, Firefox 등의 브라우저를 사용한다.
</aside>
동적 크롤링은, 코드를 통해 브라우저를 제어해, 특정 위치를 클릭하고 데이터를 수집하는 방식이기 때문에, 코드가 실행되면 브라우저가 실행된다. 따라서, 모니터에 브라우저가 띄워진 상태로 동작하게 된다.