연재 데이터 항해 훈련 일지

약 1분

공공 API·크롤링·DB 저장으로 뗀 데이터 수집 첫걸음

데이터를 가져와서 쌓는 파이프라인을 처음 만들어 봤다. 소상공인 상권정보 API로 치킨집 데이터를 수집했고 하나은행 환율은 read_html로 크롤링해 자동화한 뒤 Selenium+DB까지 붙였다.

TrainingScrapingAPI

API에서 데이터 가져오기

첫 대상은 소상공인시장진흥공단 상가(상권)정보 API. 활용가이드의 오퍼레이션 명세를 읽고 requests.get(url, params=payload) 로 요청을 조립하는 것부터 시작했다.

url = "http://apis.data.go.kr/B553077/api/open/sdsc2/storeListInUpjong"
payload = dict(divId="indsSclsCd", key="I21006",  # 소분류코드(치킨)
               numOfRows=100, pageNo=1, type="json",
               serviceKey=os.getenv("service_key"))
r = requests.get(url, params=payload)

핵심 학습 포인트:

  • 응답 코드 확인(200 정상), r.text / r.json() 의 차이
  • totalCount 를 뽑아 전체 페이지 수를 계산하고 반복 수집(페이지네이션)
  • 같은 데이터를 json 과 xml 두 포맷으로 받아 비교
  • 수집 결과를 DataFrame 으로 정리해 CSV로 저장
  • time.sleep() 으로 API 호출 속도를 조절해 서버 부담 줄이기

크롤링으로 환율 수집 자동화

API가 없는 데이터는 직접 긁는다. 하나은행 환율 페이지를 pd.read_html 로 읽었다. 이때 OSError 를 만났는데 HTML 텍스트를 파일처럼 다루기 위해 StringIO 로 감싸는 방법을 배웠다.

  • datetime 과 pd.date_range 로 날짜를 생성해 여러 날치를 반복 수집(스케줄러 개념)
  • 수집된 DataFrame의 컬럼 이름을 .columns / .values 로 정리
  • 최종 결과를 DB에 저장

Selenium과 DB 구성

정적 요청으로 안 되는 페이지는 Selenium으로 브라우저를 직접 제어했다. 수집한 데이터를 SQLAlchemy + pymysql 로 MySQL에 적재하며, 크롤링 → 정제 → 저장으로 이어지는 자동 수집 파이프라인을 처음 완성했다.

정리