본문 바로가기
Python/Pandas

[API 다루기] XML 데이터를 pandas 데이터프레임으로

by ISLA! 2023. 8. 7.

앞 포스팅에서 다룬 동일한 데이터를 xml 파일로 불러왔다.

xml 파일을 pandas 데이터프레임으로 변환하는 법을 알아보자.

 

🧑🏻‍💻 코드 해석

1. requests.get(xml_url)를 사용하여 주어진 URL로 HTTP 요청을 보내고, 그에 대한 응답을 req 변수에 저장

2. BeautifulSoup(req.text, "lxml")를 사용하여 req 변수에 저장된 XML 데이터를 BeautifulSoup 객체로 파싱

3. find_all 메서드를 사용하여 'stddate' 태그와 'timeavg' 태그를 모두 찾기

4. zip 함수를 사용하여 'stddate_list'와 'timeAvg_list'를 동시에 순회하면서 해당 태그들의 텍스트 값을 가져와 'stddate'와 'avgTime' 리스트에 저장

5. 데이터프레임을 만들기 위해 'stddate'와 'avgTime' 리스트를 활용하여 pd.DataFrame을 호출

 

#패키지 import
import requests
import lxml
from bs4 import BeautifulSoup

#api Url 가져오기
xml_url = "http://data.ex.co.kr/openapi/trtm/realUnitTrtm?key=test&type=xml&iStartUnitCode=101&iEndUnitCode=103&numOfRows=10&pageNo=1"

#url에서 데이터를 요청
req = requests.get(xml_url)

#beautifulsoup으로 요청한 데이터를 파싱(lxml 타입이므로 이를 지정)
soup = BeautifulSoup(req.text, "lxml")
#print(soup.prettify()) >> 결과 확인 가능

#원하는 데이터 컬럼 읽어서 리스트에 저장(태그찾기)
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})
df

 

결과

 

728x90