RSS 이용하기

Python Crawling

RSS을 통해 XML파일 스크레이핑.

nackta true
07-18-2021

XML(RSS) 스크레이핑

몇몇 웹사이트는 빈번하게 변하는 정보를 사용자에게 제공하기 위해 RSS라는 서비스를 제공한다. 이 서비스를 사용하면 XML형식의 정보를 실시간으로 얻을 수 있게된다.

이번엔 기상청 RSS를 추출해보겠다. RSS 링크는 다음과 같다.

http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=146

from xml.etree import ElementTree
from urllib.request import urlopen
f = urlopen('http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=146')
xml_data = f.read().decode('utf-8')
root = ElementTree.fromstring(xml_data)
root
<Element 'rss' at 0x000000002EB613B0>

pandas의 데이터프레임 형태로 일시, 최저, 최고, 날씨 정보를 추출한다.

원하는 정보를 얻기 위해 xml이 어떤 형식으로 이루어져 있는지 확인한다.

channel/item/description/body/location/data에 원하는 정보가 있다.

import pandas as pd
datalist = []
for item in root.findall('channel/item/description/body/location/data'):
    # find() 메서드로 element 탐색, text 속성으로 값을 추출
    tm_ef = item.find('tmEf').text
    tmn = item.find('tmn').text
    tmx = item.find('tmx').text
    wf = item.find('wf').text
    data = pd.DataFrame({
        '일시':[tm_ef],
        '최저기온':[tmn],
        '최고기온':[tmx],
        '날씨':[wf],
    })
    datalist.append(data)
weather = pd.concat(datalist)
weather  
                  일시 최저기온 최고기온    날씨
0   2022-05-18 00:00   14   27    맑음
0   2022-05-18 12:00   14   27    맑음
0   2022-05-19 00:00   14   27    맑음
0   2022-05-19 12:00   14   27  구름많음
0   2022-05-20 00:00   14   27  구름많음
..               ...  ...  ...   ...
0   2022-05-22 00:00   14   26    맑음
0   2022-05-22 12:00   14   26    맑음
0   2022-05-23 00:00   15   26    맑음
0   2022-05-24 00:00   15   26    맑음
0   2022-05-25 00:00   15   26  구름많음

[182 rows x 4 columns]

하지만 이 날씨가 어느지역의 날씨인지 알 수가 없다. 지역별로 다시 정리해봤다.

citylist = []
for item in root.findall('channel/item/description/body/location'):
  city = item.find('city').text
  citylist = citylist + ([city]*13)
weather['지역'] = citylist
library(reticulate)
knitr::kable(head(py$weather))
일시 최저기온 최고기온 날씨 지역
2022-05-18 00:00 14 27 맑음 전주
2022-05-18 12:00 14 27 맑음 전주
2022-05-19 00:00 14 27 맑음 전주
2022-05-19 12:00 14 27 구름많음 전주
2022-05-20 00:00 14 27 구름많음 전주
2022-05-20 12:00 14 27 구름많음 전주

Citation

For attribution, please cite this work as

nackta (2021, July 18). nackta blog: RSS 이용하기. Retrieved from https://nackta.github.io/posts/2021-07-18-python-crawler3/

BibTeX citation

@misc{nackta2021rss,
  author = {nackta, },
  title = {nackta blog: RSS 이용하기},
  url = {https://nackta.github.io/posts/2021-07-18-python-crawler3/},
  year = {2021}
}