본문 바로가기
Python/파이썬 크롤링 예

파이썬 웹 크롤러 만들기 : 기상청 RSS 도시 예보

by 워니 wony 2019. 5. 9.

기상청 사이트 이외에도 다양한 api 또는 RSS 정보를 제공하는 곳들이 다수 있다.

공공데이터 활용이 가능하거나, 정보 제공사이트 등에서 무료로 서비스 하는 정보를 개발자 들이 사용할 수 있게 제공하는 곳이 다수 있기 때문에 관련 내용을 참고해 보는 것이 좋다.

 

RSS는 참고로 Really Simple Syndication, Rich Site Summary로 정보를 XML 형태로 제공하여 쉽게 원하는 정보만 가지고 수정할 수 있도록 제공해주는 서비스이다.

 

기상청 아래 사이트에 가면 RSS 정보를 사용할 수 있는 URL을 준다.

 

RSS > 인터넷 > 서비스 > 생활과 산업 > 날씨 > 기상청

홈 > 생활과 산업 > 서비스 > 인터넷 > RSS |날씨|생활과 산업|서비스|인터넷|RSS

www.weather.go.kr

 

 

ㅇ 기상청 RSS 서비스 

 

ㅇ RSS로 제공 받을 수 있는 XML

  • XML은 Extensible Markup Language로 다른 많은 종류의 데이터를 기술하는 데 사용할 수 있다. 주로 다른 종류의 시스템, 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받을 수 있게 하는 용도로 사용한다. json 형식과 함께 많이 사용되는 데이터 형식이다.

 

 

 

기상청 RSS 활용 웹 크롤러

  •  RSS는 url에 접근하면 xml 형태의 데이터가 있기 때문에 해당 url에서 requests로 코드를 가져와서 원하는 정보만 추려서 사용할 수 있다. 
  • <사용자정의태그></사용자정의태그>의 형태로 만들어 져 있기 때문에  BeautifulSoup을 사용하는 경우 사용자 정의 태그로 접근해서 정보를 가져올 수 있다.
  • 태그로 접근 한 뒤 원하는 정보만 그룹으로 가져오기 위해서 re.findall 정규표현식을 사용하면 된다.
  • 지금은 화면에 출력하는 형태로만 작업하였지만 DB에 바로 연동할 수도 있고, 필요에 따라서는 ,(콤마) 같은 구분자로 출력 후 엑셀에서 구분자로 분리하여 데이터화 하여 사용할 수도 있다.
import re
import requests
from bs4 import BeautifulSoup

url = 'http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=108'
html = requests.get(url)
bs_html = BeautifulSoup(html.content,'html.parser')

location = bs_html.find_all('location')


for l in location:
    city = l.find('city').text
    print(city)
    w_list = re.findall('<data>.+?<tmef>(.+?)</tmef>.+?<wf>(.+?)</wf>.+?<tmn>(.+?)</tmn>.+?<tmx>(.+?)</tmx>\n<reliability>(.+?)</reliability>\n</data>',str(l),re.DOTALL)
    i = 1
    for w in w_list:
        print(w[0],w[1],w[2],w[3],w[4])

    print('-'*30)

(결과값)

반응형

댓글