RSS을 통해 XML파일 스크레이핑.
몇몇 웹사이트는 빈번하게 변하는 정보를 사용자에게 제공하기 위해 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
= urlopen('http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=146')
f = f.read().decode('utf-8') xml_data
= ElementTree.fromstring(xml_data)
root 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 속성으로 값을 추출
= item.find('tmEf').text
tm_ef = item.find('tmn').text
tmn = item.find('tmx').text
tmx = item.find('wf').text
wf = pd.DataFrame({
data '일시':[tm_ef],
'최저기온':[tmn],
'최고기온':[tmx],
'날씨':[wf],
})
datalist.append(data)= pd.concat(datalist)
weather 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'):
= item.find('city').text
city = citylist + ([city]*13)
citylist '지역'] = citylist weather[
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 | 구름많음 | 전주 |
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} }