ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3. 기상청 RSS를 크롤링해보자. (python, urllib)
    Python/파이썬 웹 크롤러 2019. 5. 16. 18:07
    반응형

    예제 : 

    https://github.com/pycrawling/crawling-tutorial/blob/master/weather.ipynb

     

    0. 주의사항

    과도한 크롤링은 법적인 문제가 될 수도 있습니다.  
    실습 시 대상 서버에 과도한 부하가 걸리지 않도록 주의합시다.

    1. RSS란

    RSS 란 Really Simple Syndication 또는 Rich Site Summary 의 줄임말입니다. 
    RSS 를 활용하면 직접 방문 없이 RSS 리더를 통해서 최신 정보를 모아서 볼 수 있습니다. 

     

    주로 언론사의 홈페이지에서 제공합니다. 

    뉴스 모아보기가 가능~!

     

    팟 캐스트도 일종의 RSS 서비스 입니다. 
    RSS 내에 미디어 파일을 링크한 것입니다. 

     

    2. 기상청 RSS 서비스

    https://www.weather.go.kr/w/pop/rss-guide.do

     

    저는 서울, 경기도의 중기 예보 RSS 주소를 열어보았습니다. 
    http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=109

     

    이를 웹 브라우저로 열어보면 다음과 같은 화면이 나옵니다. 

     

    각 태그의 의미는 '중기예보 RSS 정의(노란색 버튼)'를 참고하십시오. 

    3. 파이썬과 주피터 노트북을 이용해 저 주소를 열어보겠습니다. 

    파이썬 공식문서 입니다. 
    https://docs.python.org/3/library/urllib.request.html

    그런데 파이썬 공식 문서를 한글로 번역하신 분이 계시네요. 대단하십니다. 
    https://python.flowdas.com/library/urllib.request.html

    from urllib import request  # urllib 라이브러리를 불러옵니다.
    
    r = request.urlopen('https://www.kma.go.kr/wid/queryDFSRSS.jsp?zone=2726058000')
    # urllib 의 request 에서 urlopen 함수를 실행하고 결과를 r에 바인딩합니다.
    html = r.read().decode('utf-8')
    print(html)

    노트북으로 r을 확인해 봅니다.
    바로 볼 수는 없습니다.
    http로 시작하는 객체입니다. 

    객체를 보기 위해 .read() 를 붙였습니다. 

    "b"로 시작하는 문자열은 바이트 문자열이란 뜻입니다. 
    일반적인 문자열로 바꾸기 위해 decode() 메서드가 필요합니다. 
    참고 : https://dojang.io/mod/page/view.php?id=2462

     

    글자의 인코딩을 맞춰 풀어주기 위해 .decode('utf-8') 를 붙였습니다.  
    "b"가 사라졌습니다. 

     

    참고) 저기서 \r\n은 개행문자 입니다.

     

    \r은 CR(carriage return, 문장의 제일 앞으로), \n은 LF(line feed, 다음 줄)의 의미입니다. 
    \r\n은 도스(윈도우즈), \n은 유닉스, \r은 Mac에서 CR+LF 구실을 합니다.
    3가지 시스템에서의 개행문자가 다르다는 것도 재미있는 일입니다. 

    더 자세한 것은 위키를 참고하십시오.
    https://ko.wikipedia.org/wiki/새줄_문자

     

    r.status로 웹페이지의 상태를 확인할 수도 있습니다.

    r.status의 반환값의 의미는 다음과 같습니다.
    https://developer.mozilla.org/ko/docs/Web/HTTP/Status

     

    사실 웹 크롤링에 필요한 urllib에 대해 알아야할 지식은
    저 3~4줄의 소스 정도면 충분하지만... 
    그래도 조금 더 ....

     

    4. urllib 란 

    urllib는 파이썬의 웹 클라이언트 용 표준 라이브러리입니다.
    표준 라이브러리란 파이썬을 깔면 같이 설치되는 기본적인 라이브러리라고 이해하시면 됩니다.

     

    기상청 RSS는 '퍼가시오~!' 즉 공개를 위해 만들어진 서비스라 사용하기 무척 쉬웠습니다. 
    기본 라이브러리로도 충분히 스크랩 할 수 있습니다. 

     

    하지만 대부분의 상용 사이트들은 로그인 과정이 필요하거나 
    크롤링을 불편하게 하는 장치를 만들어둔 경우도 많습니다. 



    그래서 기본 라이브러리 이상의 강력한 도구가 필요합니다.
    셀레니움 등의 라이브러리를 이용해야 합니다.

     

    이에 대해서는 다음에 설명드리겠습니다. 

     

    urllib의 구성
    urllib는 urllib.parse, urllib.request, urllib.error, urllib.response, urllib.robotparser 등 

    총 5개의 내부 모듈로 구성되어 있습니다.

    주파이터 노트북에서 탭을 누르면 저렇게 자동완성이 됩니다. 5가지 모듈을 확인할 수 있습니다. 그런데 왜 두번...

    파이썬 2와 파이썬 3의 구성이 좀 다릅니다만 2019년 현재 기준으로 파이썬 2를 굳이 배울 필요는 없으니까 간단히 언급만 하고 넘어가겠습니다. 인터넷을 검색하다 보면 크롤러 예제 중에 urllib2를 종종 볼 수 있습니다. 이 패키지는 파이썬2에서 사용되던 것입니다. 파이썬 3에서는 urllib로 통합이 되어 있습니다. 

     

    urllib.parse는 URL을 파싱합니다.

    (전 처음에 html이나 xml을 파싱하는 모듈인 줄 알았습니다. 그건 아니더군요. --;)

    파싱은 문장 등을 구성 성분으로 분해해서 그들의 상관관계를 분석하는 것을 말합니다.
    파이썬의 URL 파서는 URL을 분해, 조합, 변경하는 기능을 제공합니다.
    더 자세한 것은 파이썬 설명서를 참고하시기 바랍니다.
    https://docs.python.org/3/library/urllib.parse.html
    https://python.flowdas.com/library/urllib.parse.html


    urllib.robotparser 는 robots.txt 파일을 파싱할 때 사용합니다.
    robot.txt는 웹크롤러들의 접근을 제어하기 위한 권고를 담은 파일입니다.

    urllib.request는 URL을 열고 그 응답을 받아주는 모듈입니다. (우리가 써야할...)
    urllib.error는 urllib.request가 리퀘스트 요청했을 때 발생하는 예외와 관련된 모듈입니다.
    urllib.response 는 urllib.request 모듈 내부에서 사용됩니다.

    반응형
Designed by Tistory.