본문 바로가기

BackEnd

공공데이터 Open API xml parsing하는 코드

반응형
# import libraries 
import pandas as pd  
import numpy as np
import requests
import pprint
from os import name
import xml.etree.ElementTree as et
import pandas as pd
import bs4
from lxml import html
from urllib.parse import urlencode, quote_plus, unquote


# 인증키 입력 (encoding이 안되면 decoding으로 사용)
encoding = '발급받은 encoding code'
decoding = '발급받은 decoding code'

# url 입력
url = '활용 OpenApi EndPoint'
params ={'serviceKey' : decoding, 'numOfRows':'999999' }

# 요청 및 결과 받기위한 코드
response = requests.get(url, params=params)

# xml 내용
content = response.text

# 깔끔한 출력 위한 코드
pp = pprint.PrettyPrinter(indent=4)
# print(pp.pprint(content))

xml_obj = bs4.BeautifulSoup(content,'lxml-xml')
rows = xml_obj.findAll('item')
# print(rows)

# 각 행의 컬럼, 이름, 값을 가지는 리스트 만들기
row_list = [] # 행값
name_list = [] # 열이름값
value_list = [] #데이터값

# xml 안의 데이터 수집
for i in range(0, len(rows)):
    columns = rows[i].find_all()
    #첫째 행 데이터 수집
    for j in range(0,len(columns)):
        if i ==0:
            # 컬럼 이름 값 저장
            name_list.append(columns[j].name)
        # 컬럼의 각 데이터 값 저장
        value_list.append(columns[j].text)
    # 각 행의 value값 전체 저장
    row_list.append(value_list)
    # 데이터 리스트 값 초기화
    value_list=[]

#xml값 DataFrame으로 만들기
sports_df = pd.DataFrame(row_list, columns=name_list)
print(sports_df)
반응형