[제로베이스] 데이터 사이언스 12기 - (03-04 스터디노트)

윤태호·2023년 3월 3일
0
post-thumbnail

오늘 수강한 강의 - EDA 유가 분석 (01 ~ 14)

01 ~ 02 selenium 설치

Beautiful Soup 만으로 해결할 수 없는 것

  • 접근할 웹 주소를 알 수 없을 때
  • 자바스크립트를 사용하는 웹페이지의 경우
  • 웹 브라우저로 접근하지 않으면 안될 때

[Selenium]

  • 웹 브라우저를 원격 조작하는 도구
  • 자동으로 URL을 열고 클릭 등이 가능
  • 스크롤, 문자의 입력, 화면 캡처 등등

Selenium 세팅

  • conda install selenium
  • 자신의 크롬 버전을 알아야 한다
  • 크롬 오른쪽 상단 ... 선택
  • 도움말에서 Chrome 정보 선택
  • Chrome 버전 확인
  • 구글에서 chromedriver 검색
  • Downloads 페이지 접속
  • https://chromedriver.chromium.org/downloads
  • 크롬 버전 앞 부분 숫자에 맞는 것 중 선택
  • 사용중인 OS버전에 맞춰서 다운로드
  • 다운받은 후 압축을 풀어준다
  • ds_study - source_code가 있는 폴더에 driver 폴더 생성
  • driver 폴더 안에 chromedriver 파일을 넣어준다

03 ~ 10 selenium 기초

selenium 기초

  • 크롬 드라이버 실행
  • webdriver.Chrome 명령으로 크롬 드라이버의 경로 지정
  • get 명령으로 접근하고 싶은 주소 지정
  • 새로운 크롬이 나타나면서 지정된 웹 주소에 접근
  • 스크롤 가능한 높이를 가져오자
  • 화면 스크롤 (화면 맨 밑으로 내려감)
  • 화면 페이지를 지정하는 지점의 xpath를 찾자
  • 그렇게 찾은 xpath 지점까지 스크롤하는 코드
  • 페이지를 제일 위로 올린후에 코드를 실행한 결과
  • id로 찾기
  • 입력 창에 글자 넣기
  • 글자가 채워짐
  • 다시 검색 버튼을 찾음
  • xpath를 찾음
  • 버튼을 클릭하는 코드 실행
  • 이렇게 화면이 바뀜
  • 현재 화면의 html 코드 가져오기
  • 광고를 제외한 검색결과가 나타나는 태그를 찾거나
  • 검색결과 하나하나를 의미하는 태그를 찾을 수 있다
  • 이렇게 접근 가능

11 ~ 14 selenium으로 데이터 얻어오기

사이트 구조 분석

  • https://www.opinet.co.kr/user/main/mainView.do
  • 대한민국 주유 가격을 알아보는 사이트
  • 싼 주유소 찾기에서 지역별 선택
  • https://www.opinet.co.kr/searRgSelect.do
  • 사이트의 구조 확인
  • 목표 데이터는 브랜드, 가격, 셀프 주유 여부, 위치
  • 지역에서 광역시도와 시구 정보를 입력
  • 지도가 바뀌고, 또 잠시 후 주유소 정보가 로딩
  • 셀프 여부를 알려주고 있고, 휘발유 가격도 있지만 상표와 주소 정보를 다루기가 까다로울 것 같다
  • 엑셀 파일에는 원하는 정보가 모두 존재한다
  • 서울 => 각 구를 번갈아 선택
  • 엑셀 파일을 다운로드 받음
  • 다운로드 받은 액셀을 분석
  • 마우스를 클릭하여 지역을 선택해야 한다
  • 지역을 선택해도 드러난 웹 주소가 변경되지 않는다
  • 생각보다는 HTML 소스에서 원하는 정보를 얻는 것도 쉬워보이지 않는다

Selenium으로 접근해 보기

  • Selenium에서, Chrome Driver를 이용해서 원하는 웹 주소로 접근
  • Mac 에서는 크롬드라이버 권한을 줘야한다
  • 이렇게 창이 뜬다(이 창은 작업을 종료할 때 까지 닫으면 안된다)
  • 그런데 간혹 페이지가 전화되지 않는 경우가 있다
  • 이 주소를 한 번 더 실행
  • 크롬 드라이버로 왼쪽 페이지까지 접근하면 성공

  • 먼저 광역시도를 선택하는 곳부터 찾기
  • id="SIDO_NM0"
  • find_element(By.ID, "SIDO_NM0")로 찾았지만 기대한 결과가 아니다
  • id가 있던 태그를 확인
  • option 이라는 태그 안에 광역시도의 값을 받아와야 할 것 같다
  • sido_list_raw 안에 있다

  • 지역 리스트를 가져올 수 있다
  • 값은 얻어 왔지만 박스의 내용은 어떻게 바꿔야 할까
  • 박스의 id는 SIDO_NM0 였고, driver에서 해당 id를 sido_list_rqw 변수로 저장했었다
  • sido_list_raw 변수에 리스트 결과값을 저장한 sido_names
  • sido_names의 값을 send_keys를 이용해서 보내면 된다
  • 0은 서울, 1은 부산, 2는 대구 ... 16은 제주
  • 서울로 고정
  • 두 번쨰 리스트인 시/군/구 항목도 동일하게, id와 option 확인
  • id="SIGUNGU_NM"
  • option에서 리스트안의 변수값들을 저장
  • send_keys(gu_names[num]) 로 해당 값을 변경해보자
  • 0:강남구, 1:강동구 ...
  • 엑셀저장 태그 id 값 확인
  • id="glopopd_excel"
  • 하나의 시와 구를 선택해서 엑셀 파일 저장까지 되는지 테스트
  • 테스트용으로 받은 엑셀 파일은 삭제
  • 반복문으로 모든 구의 데이터를 엑셀 파일로 저장
  • Download 폴더에 25개의 엑셀 파일이 있어야 한다
  • 25개가 정상적으로 있다면 ds_study - data 폴더에 넣기
  • 엑셀 파일을 열어보면 이렇게 정리되어 있다
  • 지역, 상호, 주소, 상표, 전화번호, 셀프여부, 종류
  • driver.close()

재미있었던 부분

Selenium과 driver를 이용하여 크롬 외부에서 원격으로 행동을 컨트롤 할 수 있는 부분이 새롭고 재미있었다

어려웠던 부분

개발자 도구에서 하위와 상위를 찾을때 너무 헷갈릴 때가 종종 있었다 자주 해보면 익숙해질것이라고 믿는다

느낀점 및 내일 학습 계획

코드를 실행하는 것보다 과정의 개발자 도구 다루는 법을 더 익히는게 좋을 것 같다
내일은 나머지 유가 분석 공부를 마저 할 예정이다

profile
부트캠프 참여중

0개의 댓글