본문 바로가기
파이썬

[파이썬] 파이썬으로 웹 크롤링 공부하기

by 딩박사 2021. 5. 31.
반응형

* 본 포스팅은 한국품질재단 취업지원센터에서 주최하는 혁신성장 청년인재 집중 양성사업(인공지능)에서 학습한 내용을 포스팅합니다.


크롤링(crawling)이란?

- 사이트에 접속해서, 사람이 실제로 사용하는 것처럼 행위등을 수행하여 데이터를 수집하는 과정(방식)

- Selenium 모듈 사용


학습 목표 : 국내 주유 사이트 정보 수집

 

준비 : 크롬 브라우저, 크롬 드라이버(이때 본인 크롬정보와 동일한 버전의 드라이버 사용), 주피터 노트북

 

 

1. Target 설정 : 지역별 싼 주유소 찾기(오피넷)

https://www.opinet.co.kr/user/main/mainView.do

 

싼 주유소 찾기 오피넷

 

www.opinet.co.kr

 

2. 목표 : 지역 시/도, 시/군/구 별로 싼 주유소 찾기 → 원하는 정보 찾기 후 엑셀 다운로드

3. selenium 모듈 설치

!pip install selenium

 

 

4. selenium 모듈 사용 및 웹을 띄우는 동안 넉넉한 시간을 주기 위해서 time 모듈 사용

from selenium import webdriver as wd
import time

 

5. 웹 드라이버 가동 후 원하는 타겟사이트로 접속(접속을 해보니 2번의 요청이 필요)

driver      = wd.Chrome( './chromedriver.exe' )
target_site = 'https://www.opinet.co.kr/searRgSelect.do'
driver.get( target_site )
time.sleep( 2 )
driver.get( target_site )

- 파이썬에서는 sleep()안에오는 것은 sec으로 받아들인다.

 

 

6. 타깃 사이트에서 시/도 값을 세팅할 후보 값을 추출한다.

#SIDO_NM0라는 id를 갖는 option 값들을 tmp에 저장하는데 이때 빈 데이터가 나오는 것을 막기 위해

value라는 값만 가지는 option만 sidos에 for문을 이용하여 sidos 저장

 

tmp         = driver.find_elements_by_css_selector( '#SIDO_NM0 > option' )
sidos       = [ option.get_attribute('value') 
                for option in tmp 
                if option.get_attribute('value')]

 

7. 시/도 부분의 부산광역시를 찾기 위한 코드 select 요소를 찾고, select 값을 해당 sido로 변경

for sido in sidos[1:2]:
    sido_sel = driver.find_element_by_id('SIDO_NM0')
    sido_sel.send_keys( sido )

 

8. 5초 대기 후 로드된 시군구 화면에서 value값들을 추출한다.

time.sleep(5)
    sggs     = driver.find_elements_by_css_selector( '#SIGUNGU_NM0 > option' )
    sigungus = [ option.get_attribute('value') 
                 for option in sggs
                 if option.get_attribute('value')
               ]

 

9. value들 중에서 모든 구를 만나면, 값을 세팅한다. 시군구 select 태그를 특정해서, 주어진 시군구로 세팅

5초 대기 후 사이트는 구의 주유소 정보를 다운로드

for sigungu in sigungus:
        driver.find_element_by_id('SIGUNGU_NM0').send_keys( sigungu )
        time.sleep(5)
        # 엑셀 다운로드 
        driver.find_element_by_id('glopopd_excel').click()

 

10. 동작 중인 화면

 

11. 다운로드된 정보

12. 마무리

# 마무리
time.sleep(10)
driver.close()
driver.quit()

- 메모리에 적재되어 있는 프로세스를 정리한다

반응형

댓글