Python/Pandas
[API 다루기] XML 데이터를 pandas 데이터프레임으로
ISLA!
2023. 8. 7. 12:58
앞 포스팅에서 다룬 동일한 데이터를 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