brunch

You can make anything
by writing

C.S.Lewis

by Moai Nov 28. 2020

Selenium 크롤링

구글, 네이버, 다음 연관검색어 크롤링

웹드라이버를 이용하면 웹브라우저를 내가 좋아하는 프로그래밍 언어로 테스트해볼 수 있다. 마치 매크로처럼 프로그래밍해놓은 코드를 따라 클릭, 입력, 스크롤, 값 가져오기 등을 할 수 있다. 파이썬 모듈 중 셀레니움은 이 웹드라이버와 통신하여 파이썬 코드로 브라우저를 제어하는 기능을 제공해준다.


우선 Selenium과 통신할 수 있는 웹드라이버를 다운로드하여보자. 적절한 웹 드라이버를 다운로드하기 위해서는 나의 브라우저 정보를 알아야 한다.

구글에 Selenium 라고 검색 한 뒤 첫 번째에 나오는 사이트로 들어가자


좌측에 있는 Selenium Webdriver에 있는 다운로드 버튼을 클릭한다.

Python에 해당하는 프로그램을 다운로드하자

이후 내 브라우저 버전에 매칭 되는 드라이버를 찾은 뒤 다운로드해준다. 윈도우의 경우 64비트이더라도 32비트 버전 다운로드하면 된다.



다운로드가 다 되었으면 압축을 풀고 chromedriver.exe 파일을 내 소스코드 루트 폴더에 넣어주면 된다.

이제 pip를 통해 selenium 라이브러리를 설치하자.




지금까지는 python의 기본 라이브러리인 requests를 통해 웹에 있는 데이터를 가져왔다. requests의 가장 큰 단점은 웹서버에서 봇을 탐지해 요청을 막을 경우 원하는 데이터를 가져올 수 없다는 것이다. 네이버의 경우 진짜 잘 막아놓아서 크롤링하기가 쉽지 않다.


셀레니움을 사용하는 방법은 매우 간단하다.


driver = Chrome()

wait = WebDriverWait(driver, 10)

크롬드라이버 객체를 만들고 웹 페이지가 정상적으로 열렸는지 확인해주는 wait객체를 만들자.

드라이버가 제공하는 함수에 대한 설명은 다음 웹페이지에 잘 설명되어 있다.

https://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webdriver


몇 개의 함수만 소개하자면

get(url) 원하는 페이지로 이동한다.

save_screenshot(파일경로) 해당 파일경로에 웹 스크린샷을 저장한다.

maximize_window() 브라우저를 최대 크기로 변경한다.

close() 현재 사용 중인 탭을 종료한다.

quit() 아예 종료시켜버린다.

find_element_by_xpath(xpath) 또는 find_elements_by_xpath(xpath) xpath에 위치한 엘리먼트 정보를 가져온다.


xpath는 하드디스크에 위치한 파일의 경로처럼 웹 페이지에 위치한 엘리먼트의 경로이다. 확인 방법은 다음과 같다. 우선 찾고자 하는 페이지에 개발자 도구를 실행시킨다.

네이버 검색 버튼의 xpath는 다음과 같이 가져오면 된다.


연관검색어의 경우 개수가 여러 개다. 이것들을 모두 다 가져오고 싶으면 어떻게 해야 할까?

//*[@id="nx_footer_related_keywords"]/div/div[2]/ul/li[1]/a/div

위 xpath를 class를 참조하여 다음과 같이 변경한다.

//*[@id="nx_footer_related_keywords"]/div/div[2]/ul/li[@class="item"]/a/div[@class="tit"]



이제 연관검색어를 크롤링하는 코드를 구현해보자

https://gist.github.com/moaikim/cc0135edd3180b406256f78764ff1e08


매거진의 이전글 flask 기반 REST API 백엔드 서비스
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari