<참조: 파이썬을 이용한 머신러닝, 딥러링 실전개발 입문>
파이썬, 기상청 웹 XML 페이지의 도시별 날씨 출력하기
글. 오상문 sualchi@daum.net
기상청에서 제공하는 사이트의 '전국 육상중기예보' 페이지에서 xml 형태로 다운로드 받고 그것을 분석해서 날씨를 출력하는 예제이디.
기상청 사이트는 "https://www.weather.go.kr"이고 여기에서 접근할 곳은 "weather/forecast/mid-term-rss3.jsp?stnId=108"이다.
xml 코드 확인해보면 다음과 같다.
<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
<channel>
<title>기상청 육상 중기예보</title>
<link>http://www.kma.go.kr/weather/forecast/mid-term_01.jsp</link>
<description>기상청 날씨 웹서비스</description>
<language>ko</language>
<generator>기상청</generator>
<pubDate>2020년 01월 07일 (화)요일 18:00</pubDate>
<item>
<author>기상청</author>
<category>육상중기예보</category>
<title>전국 육상 중기예보 - 2020년 01월 07일 (화)요일 18:00 발표</title>
<link>http://www.kma.go.kr/weather/forecast/mid-term_01.jsp</link>
<guid>http://www.kma.go.kr/weather/forecast/mid-term_01.jsp</guid>
<description>
<header>
<title>전국 육상중기예보</title>
<tm>202001071800</tm>
<wf><![CDATA[기압골의 영향으로 11~12일과 16일은 제주도에 비가 오겠고, 동풍의 영향으로 15~16일은 강원영동에 비 또는 눈이 오겠습니다. <br />그 밖의 날은 고기압의 가장자리에 들어 구름많은 날이 많겠습니다. <br />기온은 평년(최저기온: -12~0℃, 최고기온: 0~8℃)보다 조금 높겠습니다.<br />강수량은 평년(0~3mm)보다 적겠으나, 강원영동과 제주도는 많겠습니다.]]></wf>
</header>
<body>
<location wl_ver="3">
<province>서울ㆍ인천ㆍ경기도</province>
<city>서울</city>
<data>
<mode>A02</mode>
<tmEf>2020-01-10 00:00</tmEf>
<wf>맑음</wf>
<tmn>-5</tmn>
<tmx>4</tmx>
<reliability></reliability>
<rnSt>0</rnSt>
</data>
...
<이하 생략>
이 자료에서 0시 기준으로 city, wf, tmn 요소의 텍스트를 가져와 출력하겠습니다. 다음은 해당 예제 소스 코드이다.
import urllib.request as req
import os.path
# xml 페이지 다운로드하여 파일에 저장
url = "https://www.weather.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=108"
filename = "weather_forecast.xml"
if not os.path.exists(filename):
req.urlretrieve(url, filename)
# xml 파일 인코딩 및 분석(파싱)하기
# 한글 코드 설정 맟 xml 파싱 지정
xml = open(filename, encoding='utf-8').read()
soup = BeautifulSoup(xml, 'html.parser')
# 각 도시의 0시 기준 기상 상태와 기온 출력
for location in soup.find_all('location'):
# xml요소 이름을 이용하여 필요한 자료를 출력한다.
print(location.find('city').string, ":", location.find('wf').string, "*"
'온도', location.find('tmn').string)
[결과]
서울 : 맑음 * 온도: -5
인천 : 맑음 * 온도: -4
수원 : 맑음 * 온도: -5
파주 : 맑음 * 온도: -8
이천 : 맑음 * 온도: -6
평택 : 맑음 * 온도: -6
춘천 : 맑음 * 온도: -6
원주 : 맑음 * 온도: -5
강릉 : 맑음 * 온도: 0
대전 : 맑음 * 온도: -4
세종 : 맑음 * 온도: -7
홍성 : 맑음 * 온도: -6
청주 : 맑음 * 온도: -4
충주 : 맑음 * 온도: -6
영동 : 맑음 * 온도: -6
광주 : 맑음 * 온도: -2
목포 : 맑음 * 온도: -1
여수 : 맑음 * 온도: 1
순천 : 맑음 * 온도: -2
광양 : 맑음 * 온도: -1
나주 : 맑음 * 온도: -5
전주 : 맑음 * 온도: -3
군산 : 맑음 * 온도: -3
정읍 : 맑음 * 온도: -4
남원 : 맑음 * 온도: -4
고창 : 맑음 * 온도: -3
무주 : 맑음 * 온도: -7
부산 : 맑음 * 온도: 1
울산 : 맑음 * 온도: -1
창원 : 맑음 * 온도: -1
진주 : 맑음 * 온도: -6
거창 : 맑음 * 온도: -7
통영 : 맑음 * 온도: 0
대구 : 맑음 * 온도: -3
안동 : 맑음 * 온도: -7
포항 : 맑음 * 온도: -1
경주 : 맑음 * 온도: -3
울진 : 맑음 * 온도: -1
울릉도 : 맑음 * 온도: 3
제주 : 맑음 * 온도: 5
서귀포 : 맑음 * 온도: 6
<이상>
'Python 활용' 카테고리의 다른 글
파이썬, 2차원 자료를 pandas DataFrame() 2차원 자료 만들기 (0) | 2020.01.11 |
---|---|
파이썬, 1차원 자료를 pandas Series() 1차원 자료 만들기 (0) | 2020.01.11 |
파이썬, 리눅스에서 소스 파일 실행하기(셔뱅,shebang) (0) | 2020.01.06 |
파이썬, 기상청 웹 JSP 페이지 가져와 코드 출력하기 (0) | 2020.01.06 |
파이썬, 웹 이미지 주소로 접근하여 다운로드하기 2 (0) | 2020.01.06 |