[Python] Selenium으로 웹사이트 크롤링하기(2) — 웹 사이트 제어하기
작년 쯤에, 지인으로부터 크롤링을 해달라는 부탁을 받은 적이 있다. 소방청의 화재 현황 데이터가 필요하다고 해서 한 번 시도해 보았다. 이 경험을 바탕으로 포스팅을 해보려고 한다.
(크롤링 할 웹 사이트 — http://www.nfds.go.kr/fr_base_0001.jsf)
앞 편에서 Selenium을 설치하고 webdriver를 다운로드 받았다. 이제 이를 이용해서 사이트를 자동으로 제어해보자.
- webdriver import
앞 편에서도 언급했듯이 Selenium은 webdriver를 통해 웹 사이트를 제어한다.
위의 명령어로 webdriver를 임포트 해주자.
2. 크롬 드라이버로 접속
앞 편에서 언급한 chromedriver 경로를 지정해서 객체를 생성해준다.
3. 웹 사이트와 연결
크롤링할 웹 사이트 주소를 지정하여 연결해준다. 실제로 프로그램을 실행해보면 지정해준 url로 크롬을 통해 연결된다. 최종 소스코드는 다음과 같다.
4. 웹 사이트 제어해보기
우리는 위의 그림에서 보이는 것 처럼, 기간과 조건을 설정해 조회를 할 수 있게 제어해 볼 것이다. 제어하기 위해서는 HTML 소스를 알아야 한다. 우클릭 후 검사를 눌러 소스를 탐색해보자.
먼저, 조건에 시/도의 태그를 보면 다음과 같다.
select 태그를 이용해 옵션을 준 형태이다. 여기서는 시/도를 자동으로 설정해 주어야 되기 때문에 option value 값을 지정해서 클릭하도록 함수를 짜보았다.
find_element_by_xpath 메소드를 이용해보자. 이 메소드는 웹 페이지에서 하나의 element에 접근할 때 사용하는 메소드이다. 따라서 option value의 값을 파라미터로 받아서 접근할 수 있다. 그리고 click() 메소드를 이용해 자동으로 웹 사이트에서 클릭을 하도록 만들 수 있다.
(이 외 다른 메소드 — http://selenium-python.readthedocs.io/locating-elements.html 참조)
예를 들어, cityvalue 값을 11로 주고 위의 함수를 실행하면 option value 값이 11인 서울특별시가 지정되어 클릭되게 된다. 다른 element들도 마찬가지로 HTML 소스를 보고 제어하도록 코드를 짜면 된다.
마지막으로, 조회 버튼을 눌러 수집할 데이터를 볼 수 있어야 한다. 이것도 마찬가지로 “클릭”하는 것이기 때문에 click() 함수를 써서 조회 버튼이 클릭되도록 만들면 된다.
조회버튼은 아래에서 보는 것처럼 input 태그를 사용하여 image 타입으로 지정해주었다. 현재 이 웹페이지에서 input 태그를 사용해서 image 타입으로 지정해준 element는 조회버튼이 유일하기 때문에 find_element_by_xpath 메소드의 파라미터를 아래 검은 박스 안에 있는 것처럼 지정해주면 된다. 그리고 click() 메소드를 호출해주면 조회 버튼이 자동으로 클릭된다.
상세한 소스코드는 https://github.com/sehwaa/NFDS-Crawler 에서 볼 수 있다.
다음 편에서는 본격적으로 데이터를 수집하기 위해 웹 사이트 내부 데이터를 파싱하는 법을 알아보자.