공공 API를 통해 얻는 XML 형태의 파일은 여러 가지 방법으로 크롤링할 수 있다.
이 글에서 알려드릴 내용은 XML로 이루어진 페이지를 xmltodict 라이브러리를 이용해 API를 파싱 하는 방법에 대해 다루려고 한다.
공공 데이터 API을 발급받는 과정은 생략하고, url과 key값, 원하는 데이터 범위를 설정하는 방식으로 파싱 하는 방법이다.
In [1]:
!pip install xmltodict
import pandas as pd
import requests
import xmltodict
import time
In [3]:
key = "여러분 key값"
start = "1"
end = "10"
url = "http://210.99.248.79/rest/GoodPriceStoreService/getGoodPriceStoreList?authApiKey="+key+"&startPage="+start+"&pageSize="+end
headers = {'User-Agent' : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"}
req = requests.get(url, headers= headers).content
xmlObject = xmltodict.parse(req)
allData = xmlObject['rfcOpenApi']['body']['data']['list']
In [4]:
print(allData) # xml 전체 데이터
print(allData[0]) # rfcOpenApi -> body -> data -> list 부분 중 0번째 데이터
print(len(allData)) # list 개수
print(allData[0].items()) # key : value를 key, value로 반환하는 함수
In [5]:
df_cols =[]
for key, val in allData[0].items(): # 컬럼 구하기
df_cols.append(key) # 첫 번째 데이터에서 컬럼 부분만 가져옴
print(df_cols) # 컬럼
df_rows = {} #하나의 열이 될 딕셔너리
out_df = pd.DataFrame(columns=df_cols) #데이터 프레임. 컬럼만 먼저 설정
for i in range(len(allData)): #전체 list 개수만큼
for key, val in allData[i].items(): #해당 인덱스 list에서 key, val을 가져옴
df_rows[key] = val #df_rows 는 key, val으로 이루어짐. 딕셔너리 형태
print(df_rows) #하나의 list의 데이터들
out_df = out_df.append(df_rows, ignore_index=True) #한 row씩 df에 추가
out_df
Out[5]:
해당 기능은 colab을 이용했다.
반응형
'빅데이터 | 머신러닝 | 딥러닝 > 빅데이터 분석' 카테고리의 다른 글
[pandas/Selenium/BeautifulSoup4] 야구 시즌 기록 데이터(STATIZ) 웹 크롤링 후 DataFrame 만들기. DataFrame을 csv로 만들고 csv파일 로컬에 저장하기! (feat. Colab) (6) | 2020.09.08 |
---|---|
[pandas] 코로나 수치 예측하기 (feat. Linear Regression) (0) | 2020.05.03 |
spark를 이용해서 Missing Data다루기 (0) | 2020.04.29 |
spark를 이용해서 Sales 정보 다루기(using groupBy, orderBy) (0) | 2020.04.23 |
spark를 이용해서 삼성전자 주식 분석하기 (0) | 2020.04.15 |