이번 시간에는 Http 통신을 하여 받아온
XML 데이터를 Parsing하는 방법을 알아보겠습니다.
먼저 요청 주소가 http로 시작하는지
https로 시작하는지 확인하고
http의 경우 httpConnection을,
https의 경우 httpsConnection 객체를 선언해야합니다.
hc = HTTPSConnection("www.kma.go.kr")
파라미터로는 요청할 서버 주소를 넣어주면 됩니다.
hc.request("GET", "/wid/queryDFSRSS.jsp?zone=4122066000")
다음은 요청을 보내야 하는데
request에 요청 방식과, 요청 주소의 나머지 주소값을 파라미터로 넣어줍니다.
res = hc.getresponse() # 응답
resBody = res.read() # 응답 내용 읽기
그리고 서버로부터 받은 응답을 getresponse를 통해 받아오고
해당 응답 전체를 읽어서 resBody에 넣습니다.
kmaWeather = fromstring(resBody)
넘어온 데이터는 모두 resBody에 들어가게 되고,
fromstring을 사용해서 해당 XML데이터를
string으로 변환합니다.
이제 문자열을 출력하기만 하면 되는데
iter를 사용하면 DOM객체를 여러개 찾을 수 있습니다.
for w in fromstring(resBody).iter("data"):
XML데이터를 확인한 결과 data라는 DOM객체로
하위 DOM객체를 감싸고 있었기 때문에
전체 DOM객체를 조회한 뒤
for w in fromstring(resBody).iter("data"):
print(w.find("hour").text)
print(w.find("temp").text)
print(w.find("wfKor").text)
print(w.find("wdKor").text)
print("----------------------")
필요한 하위 DOM객체들의 내용을 출력했습니다.

이런 식으로 XML데이터의 내용이 조회됩니다.
from http.client import HTTPSConnection
from xml.etree.ElementTree import fromstring
# Http 통신
hc = HTTPSConnection("www.kma.go.kr") # 서버 주소(KR까지)
hc.request("GET", "/wid/queryDFSRSS.jsp?zone=4122066000") #요청(요청 방식, 나머지 주소값)
res = hc.getresponse() # 응답
resBody = res.read() # 응답 내용 읽기
kmaWeather = fromstring(resBody)
weather = kmaWeather.iter("data")
for w in fromstring(resBody).iter("data"):
print(w.find("hour").text)
print(w.find("temp").text)
print(w.find("wfKor").text)
print(w.find("wdKor").text)
print("----------------------")
전체 코드입니다.
확실히 코드수만봐도
Java보다는 XML 데이터에 접근하는 것이
간단해졌다고 느꼈습니다.
'Python' 카테고리의 다른 글
[Python] 책 API의 JSON 데이터 가져오기 (feat. Kakao Dev) (1) | 2025.03.07 |
---|---|
[Python] JSON 데이터 파싱 (0) | 2025.03.07 |
[Python] Datetime (0) | 2025.03.06 |
[Python] f-string (0) | 2025.03.06 |
[Python] 예외처리 (1) | 2025.03.06 |