융무의 기술블로그
article thumbnail

시계열 데이터 분석을 위해 한국 공항공사에 있는 데이터를 수집하려고 한다

https://www.airport.co.kr/www/extra/stats/timeSeriesStats/layOut.do?menuId=399

 

시계열 통계 : 항공통계 : 고객센터 : KAC 한국공항공사

해당 월 통계자료는 익월 업무일 기준 5일 이후 공표

www.airport.co.kr

한국공항공사에 가면 데이터를 엑셀형태로 받을 수 있지만 내가 원하는 형태로 불러오기 위해 크롤링을 하기로 했다.

 

한국공항공사 사이트에 들어가면 항공통계가 있는데 아래에 원하는 연도의 테이블을 크롤링 하는법에 대해 알려주려고 한다.

 

Solution                                                                                                                    

 

먼저 필요한 라이브러리를 불러온뒤에 webdriver을 이용해준다. webdriver에 관한 설명은 아래 글을 확인하길 바랍니다.

https://mjs1995.tistory.com/147

 

[크롤링 오류]This version of ChromeDriver only supports Chrome version

Problem   SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 84 selenium으로 크롤링을 하려고 했는데 다음과 같이 에러가 나타났을때 해..

mjs1995.tistory.com

from selenium import webdriver
import pandas as pd
import time
driver=webdriver.Chrome("C:/Users/user/Downloads/chromedriver_win32 (14)/chromedriver")
driver.get("https://www.airport.co.kr/www/extra/stats/timeSeriesStats/layOut.do?menuId=399") 

이렇게 실행을 하면 원하는 페이지의 크롬이 시작됩니다.

2000.01~2019.12 데이터를 원하기 때문에 selenium을 이용하려고 합니다.

연도를 설정하기 위해 마우스 우클릭을 한뒤에 검사를 클릭합니다

아래 표시된 부분을 클릭하여 연도 범위에 있는 2020에 마우스를 놔둡니다

그러면 해당 html이 나오고 태그된 부분에 마우스 우클릭후 Copy -> Copy XPath를 클릭합니다

 

여기서는 2020을 2000년으로 바꾸기 가져온 html문을 조금 수정해줘야합니다.

즉 html을 잘 보면 그 하위 코드가 option이므로 아래처럼 코드를 써줍니다.

해당 관련된 코드는 selenum html 코드를 보면 될거같습니다.

driver.find_element_by_xpath('//*[@id="strStYear"]/option[text() ="2000"]').click()
driver.find_element_by_xpath('//*[@id="strEnYear"]/option[text() ="2000"]').click()
driver.find_element_by_xpath('//*[@id="strStMonth"]/option[text() ="1"]').click()
driver.find_element_by_xpath('//*[@id="strEnMonth"]/option[text() ="12"]').click()

똑같은 작업으로 확인에 대한 XPath 코드를 가져옵니다. 그리고 마지막에 .click()을 이용해서 자동으로 눌러주도록 합니다.

driver.find_element_by_xpath('//*[@id="statsForm"]/div[2]/div/div[2]/button').click()

그다음은 아래 BeautifulSoup을 이용해서 자동적으로 2000.01 ~ 2019.12까지 표를 크롤링하는 코드를 작성하겠습니다

BeautifulSoup은 아래를 참고하길 바랍니다

https://mjs1995.tistory.com/148

from selenium import webdriver
import pandas as pd
import time
driver=webdriver.Chrome("C:/Users/user/Downloads/chromedriver_win32 (14)/chromedriver")

driver.get("https://www.airport.co.kr/www/extra/stats/timeSeriesStats/layOut.do?menuId=399") 
try:
    for i in range(2001,2020):
        #원하는 연도 설정
        driver.find_element_by_xpath('//*[@id="strStYear"]/option[text() ='+str(i)+']').click()
        driver.find_element_by_xpath('//*[@id="strEnYear"]/option[text() ='+str(i)+']').click()
        driver.find_element_by_xpath('//*[@id="strStMonth"]/option[text() ="1"]').click()
        driver.find_element_by_xpath('//*[@id="strEnMonth"]/option[text() ="12"]').click()
        driver.find_element_by_xpath('//*[@id="statsForm"]/div[2]/div/div[2]/button').click()
    
        #해당 연도 항공통계 데이터 불러오기
        page = driver.page_source
        soup = BeautifulSoup(page, 'html.parser')
        temp = soup.find_all('table')
        p=parser.make2d(temp[1])
        data=pd.DataFrame(p[2:],columns=p[0])
        #각 데이터 합치기
        df = pd.concat([df,data])
except:
    print('error')

이렇게 하면 2000.01~2019.12 까지의 한국공항공사의 테이블 데이터를 BeautifulSoup과 selenium을 이용해서 크롤링 해올수 있습니다. 

profile

융무의 기술블로그

@융무

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!