시계열 데이터 분석을 위해 한국 공항공사에 있는 데이터를 수집하려고 한다
https://www.airport.co.kr/www/extra/stats/timeSeriesStats/layOut.do?menuId=399
한국공항공사에 가면 데이터를 엑셀형태로 받을 수 있지만 내가 원하는 형태로 불러오기 위해 크롤링을 하기로 했다.
한국공항공사 사이트에 들어가면 항공통계가 있는데 아래에 원하는 연도의 테이블을 크롤링 하는법에 대해 알려주려고 한다.
Solution
먼저 필요한 라이브러리를 불러온뒤에 webdriver을 이용해준다. webdriver에 관한 설명은 아래 글을 확인하길 바랍니다.
https://mjs1995.tistory.com/147
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을 이용해서 크롤링 해올수 있습니다.
'Data Analysis' 카테고리의 다른 글
[군집분석] MeanShift & DBSCAN 클러스터링 및 평가지표 (1) | 2021.07.30 |
---|---|
[시계열] Box-Jenkins 방법을 이용한 ARIMA모형 (0) | 2020.06.17 |
[크롤링]BeautifulSoup을 이용한 표 크롤링 (5) | 2020.06.17 |
[크롤링 오류]This version of ChromeDriver only supports Chrome version (1) | 2020.06.16 |
[시계열] 홀트의 선형지수평활법, Holt-winter의 계절지수평활법 (0) | 2020.04.22 |