본문 바로가기
IT & 개발공부/파이썬(Python)

API 인증키를 활용한 웹 크롤링 실습 -1 (한국도로공사 데이터)

by 규딩코딩 2023. 8. 11.

API 인증키를 활용하여 공공기관에서 제공하는 여러 데이터들을 크롤링하는 방법을 공부해보도록 하겠다. 지난 게시글에서 열심히 발급받았던 인증키들도 이번에 활용해볼 것이다.

 

1. 한국도로공사 데이터

- 먼저 첫번째로 한국도로공사 고속도로 공공데이터 포털의 "실시간 영업소간 통행시간" 데이터를 활용해보겠다. 해당 데이터 타이틀을 클릭

 

- 다음과 같이 나오는 화면에서 요청변수, 출력결과들을 확인해주고 필히 요청변수 중 필수인 것을 확인해놓자.

확인한 뒤에 화면 하단에서 예제 실행하기를 찾아 클릭.

 

- 인증키를 발급받았다면, key안에 넣어주어도 되겠다.

- URL 보기와 예제 실행하기를 차례로 눌러가며 결과가 잘 나오는지(인증키 유효 등) 확인한다.

 

- 실제 데이터를 집어넣으면 그 데이터도 볼 수 있다. 일례로 end unit code를 105로 바꾼 결과를 출력해보자.

- code를 바꾸고 url보기로 새로 나온 URL을 복사해준다.

 

- 파이썬을 활용하여(필자는 그중에서도 jupyter lab 이용) 다음과 같이 코드를 작성하여 데이터를 불러오는 것이 가능하다.

* response 200 : HTTP 요청이 성공했음을 나타내는 서버측 성공 응답 상태 코드

 

- 하지만 여기서 끝이아니라 불러온 json 데이터를 DataFrame 으로 만드는 것까지 알아야한다.

 

- 실제 데이터 들의 딕셔너리 리스트가 시작되는 값인 "realUnitTrtmVO"를 기준으로 다음과 같이 DataFrame 을 만들 수 있다.

* 참고 : XML 로 데이터 가져온 뒤, DF 만들기

%%timeit
import requests
import lxml
from bs4 import BeautifulSoup
import pandas as pd

url = "http://data.ex.co.kr/openapi/trtm/realUnitTrtm?key=1308370912&type=xml&iStartUnitCode=101&iEndUnitCode=103&numOfRows=10&pageNo=1"
req = requests.get(url)
soup = BeautifulSoup(req.text, 'lxml') # xml 반환값이라 lxml 사용

stddate_list = soup.find_all("stddate")
timeAvg_list = soup.find_all("timeavg")

stddate = []
avgTime = []
for date, timeAvg in zip(stddate_list, timeAvg_list):
    print(date.get_text(), timeAvg.get_text())
    stddate.append(date.get_text())
    avgTime.append(timeAvg.get_text())

df = pd.DataFrame({"date":stddate, "avgTime" : avgTime})
print(df)

 

 

 

 

 

반응형