XML 데이터 다루기

XML 데이터 파싱

from bs4 import BeautifulSoup
import urllib.request as req
import os.path

url = "http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=108"
savename = "./forecast.xml"

if not os.path.exists(savename):
    req.urlretrieve(url, savename)

파싱

xml = open(savename,'r',encoding='utf-8').read()
soup = BeautifulSoup(xml, 'html.parser')

지역확인

info ={}

for location in soup.find_all("location"): # xml 은 selector보다 find가 유용함
    loc = location.find('city').string
#     print(loc)
    weather = location.find_all('tmn')
#     print(weather)
    if not (loc in info):
        info[loc] = []
    for tmn in weather:
        info[loc].append(tmn.string)
print(info)
  {'서울': ['22', '22', '22', '22', '22', '22', '23', '23', '23', '23', '23', '23', '22'], '인천': ['20', '20', '22', '22', '22', '22', '22', '22', '22', '22', '21', '22', '21'], '수원': ['21', '21', '22', '22', '22', '22', '22', '22', '22', '22', '22', '22', '21'], '파주': ['19', '19', '21', '21', '21', '21', '21', '21', '21', '21', '21', '21', '20'], '춘천': ['21', '21', '21', '21', '22', '22', '22', '22', '22', '22', '22', '22', '21'], '원주': ['21', '21', '22', '22', '22', '22', '22', '22', '22', '22', '22', '22', '21'], '강릉': ['22', '22', '22', '22', '22', '22', '22', '22', '23', '23', '22', '21', '22'], '대전': ['23', '23', '23', '23', '23', '23', '22', '22', '22', '22', '22', '22', '22'], '세종': ['22', '22', '23', '23', '23', '23', '21', '21', '21', '21', '21', '21', '21'], '홍성': ['22', '22', '23', '23', '23', '23', '21', '21', '21', '21', '21', '21', '21'], '청주': ['23', '23', '23', '23', '23', '23', '23', '23', '24', '24', '23', '23', '23'], '광주': ['22', '22', '23', '23', '23', '23', '23', '23', '23', '23', '23', '23', '23'], '목포': ['22', '22', '22', '22', '22', '22', '22', '22', '23', '23', '23', '22', '22'], '여수': ['22', '22', '22', '22', '22', '22', '22', '22', '22', '22', '22', '22', '22'], '전주': ['23', '23', '22', '22', '23', '23', '23', '23', '22', '22', '22', '22', '22'], '군산': ['22', '22', '22', '22', '22', '22', '22', '22', '21', '21', '21', '21', '21'], '부산': ['22', '22', '22', '22', '22', '22', '22', '22', '22', '22', '23', '22', '22'], '울산': ['22', '22', '22', '22', '22', '22', '22', '22', '23', '23', '23', '22', '22'], '창원': ['22', '22', '22', '22', '22', '22', '22', '22', '22', '22', '22', '22', '22'], '대구': ['22', '22', '22', '22', '22', '22', '22', '22', '23', '23', '23', '22', '22'], '안동': ['21', '21', '21', '21', '21', '21', '21', '21', '21', '21', '22', '22', '22'], '포항': ['23', '23', '23', '23', '23', '23', '23', '23', '23', '23', '23', '23', '23'], '제주': ['24', '24', '24', '24', '24', '24', '23', '23', '24', '24', '23', '23', '24'], '서귀포': ['23', '23', '24', '24', '24', '24', '23', '23', '24', '24', '23', '23', '24']}

각 지역별 날씨 텍스트 쓰기

with open('./forecest.txt','wt',encoding='utf-8') as f:
    for loc in sorted(info.keys()):
        print("+",loc)
        f.write(str(loc)+'\n')
        for n in info[loc]:
            print("-",n)
            f.write('\t'+str(n)+'\n')
  + 강릉
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 23
- 23
- 22
- 21
- 22
+ 광주
- 22
- 22
- 23
- 23
- 23
- 23
- 23
- 23
- 23
- 23
- 23
- 23
- 23
+ 군산
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 21
- 21
- 21
- 21
- 21
+ 대구
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 23
- 23
- 23
- 22
- 22
+ 대전
- 23
- 23
- 23
- 23
- 23
- 23
- 22
- 22
- 22
- 22
- 22
- 22
- 22
+ 목포
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 23
- 23
- 23
- 22
- 22
+ 부산
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 23
- 22
- 22
+ 서귀포
- 23
- 23
- 24
- 24
- 24
- 24
- 23
- 23
- 24
- 24
- 23
- 23
- 24
+ 서울
- 22
- 22
- 22
- 22
- 22
- 22
- 23
- 23
- 23
- 23
- 23
- 23
- 22
+ 세종
- 22
- 22
- 23
- 23
- 23
- 23
- 21
- 21
- 21
- 21
- 21
- 21
- 21
+ 수원
- 21
- 21
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 21
+ 안동
- 21
- 21
- 21
- 21
- 21
- 21
- 21
- 21
- 21
- 21
- 22
- 22
- 22
+ 여수
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
+ 울산
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 23
- 23
- 23
- 22
- 22
+ 원주
- 21
- 21
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 21
+ 인천
- 20
- 20
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 21
- 22
- 21
+ 전주
- 23
- 23
- 22
- 22
- 23
- 23
- 23
- 23
- 22
- 22
- 22
- 22
- 22
+ 제주
- 24
- 24
- 24
- 24
- 24
- 24
- 23
- 23
- 24
- 24
- 23
- 23
- 24
+ 창원
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
+ 청주
- 23
- 23
- 23
- 23
- 23
- 23
- 23
- 23
- 24
- 24
- 23
- 23
- 23
+ 춘천
- 21
- 21
- 21
- 21
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 22
- 21
+ 파주
- 19
- 19
- 21
- 21
- 21
- 21
- 21
- 21
- 21
- 21
- 21
- 21
- 20
+ 포항
- 23
- 23
- 23
- 23
- 23
- 23
- 23
- 23
- 23
- 23
- 23
- 23
- 23
+ 홍성
- 22
- 22
- 23
- 23
- 23
- 23
- 21
- 21
- 21
- 21
- 21
- 21
- 21

Tags:

Updated:

Leave a Comment