그동안 웹 크롤링을 한번도 안해봤는데, 이번에 한번 연습해보면서 과정을 정리해둔다.


1. Python3 + selenium 설치

나는 예전부터 CentOS에 Python3는 Source Compile 해서 설치해왔다. 그런데 2019년 하반기에 드디어 CentOS7 base repository에 Python3가 등록된 것 같다. 그래서 본 글에서는 rpm (yum) 설치로 진행하겠다.


yum -y install python3


설치 후 필수는 아니지만 pip 버전도 업그레이드를 해준다.


pip3 install -U pip


그리고 나서 selenium도 설치해준다.


pip3 install selenium


2. Google Chrome 설치

브라우저는 Chrome 뿐 아니라 Firefox나 다른 것들도 있겠지만, 나는 Chrome을 주로 사용하니 이 글에서는 Chrome 기준으로 진행하겠다.


우선 Linux용 Chrome은 아래 Chrome 공식 사이트에서 Fedora/openSUSE용 rpm 버전으로 받으면 된다.


https://www.google.com/intl/ko/chrome/?platform=linux



나는 GUI 없이 시커먼 ssh 터미널 환경에서 진행하고 있기 때문에 직접 다운로드 링크가 필요하다. 위 링크에서 다운로드 받는 최신 Stable 버전의 직접 다운로드 링크는 아래와 같다.


https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm


wget으로 받아서 yum 또는 rpm 명령어로 설치해도 되고, 직접 yum 명령어로 주소를 바로 입력해도 된다.


yum -y install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm


3. Chrome Driver 설치

selenium으로 Chrome 브라우저를 제어하려면 Driver가 필요하다. Chrome Driver는 아래 사이트에서 다운로드 받을 수 있다.


https://sites.google.com/a/chromium.org/chromedriver/


현재 기준으로 ChromeDriver 80.0.3987.106이 최신 Stable 버전인데 위에서 다운로드 받은 Chrome 최신 Stable 버전과 거의 동일하다.



참고로 위에서 설치했던 크롬 버전은 아래와 같이 확인해볼 수 있다.


google-chrome --version



다운로드 받은 Chrome Driver는 그냥 압축 풀고 바로 사용할 수 있는 Binary 파일이다. 나는 /usr/bin 디렉터리 아래로 이동해서 사용하겠다. (어디가 되었든 PATH 걸려있는 위치에 두면 편하니)


wget https://chromedriver.storage.googleapis.com/80.0.3987.106/chromedriver_linux64.zip

unzip chromedriver_linux64.zip

mv chromedriver /usr/bin/


4. selenium으로 크롤링 실습

이제 selenium으로 실제 크롤링을 실습해보자.


python3 쉘에서 아래와 같이 연습해보자.


from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")

driver = webdriver.Chrome(chrome_options=chrome_options)


여기까지 에러가 없으면 Chrome 구동이 된 것이다.

그럼 이제 웹 사이트를 열어서 얻고싶은 정보를 얻으면 된다.


아래는 실거래닷컴 사이트를 열어서 경기도 용인시 신고가를 가져와 한줄씩 text만 출력해보는 예제이다. 결국 각 사이트별로 개발자도구로 보면서 Element id나 name을 확인해서 크롤링 해야 한다.


driver.get("https://silgeorae.com")
table = driver.find_element_by_id("newHighPriceBottomArea0")
for tr in table.find_elements_by_tag_name('tr'):
    print(tr.text)


실제로 로그인이나 검색처럼 복잡한 조작을 하려면 find_element_by_id, send_keys, click 등의 method를 적절히 잘 활용하면 된다.


나도 오늘 처음 설치하면서 실습해본거라 기초는 여기까지 하고, 더 복잡한 스킬은 추후 사용해보면서 필요시 추가 포스팅하도록 하겠다.