이전 글처럼 데이터를 불러올 경우, 다른 지역의 날씨를 알아보려고 할때마다 메모장을 고쳐줘야하는 불편함이 있다.
그래서 파이썬 코드 수정 없이 cmd창에서 'python ex03.py 108' 과 같이 입력하면 바로 해당 지역날씨를 불러오는 방법에 대해 공부하겠다.
sys 모듈
---------------------------------------------------------------------------------------------------------------------------------
▶위의 명령줄에서 108을 명령줄 인수(매개변수) 라고 한다.
사실 'python ex03.py 108' 에서 명령줄 인수는 ex03.py 와 108 두 개이다. (python은 명령줄 인수 X)
▶이러한 명령줄 인수는 파이썬의 sys모듈을 통해 받아들이는 것이다.
즉, 파이썬에서 매개변수를 받으려면 sys모듈의 argv(argument value) 리스트형태를 불러와야한다. (sys.argv)
▶argv 리스트에 접근하는 방식은 index로 접근한다.(argv[0])
ex) argv[0] == ex03.py argv[1] == 108
▶리스트 길이(==명령줄 갯수) 파악 방법 ; len(sys.argv)
이제 메모장에서 직접 입력해보자!
파이썬 코드 - (1) url주소 지정
---------------------------------------------------------------------------------------------------------------------------------
[복사용]
import sys # sys 라이브러리로 argv 리스트 이용.
import urllib.request as req #웹상 데이터를 불러오기위한 모듈.
import urllib.parse as parse #url 인코딩 모듈
# 명령줄 인수가 제대로 입력되었는지 확인
if len(sys.argv) <= 1 : #리스트 길이가 1이하이면 인수가 다 입력되지 않았다는 것.
print("사용법: python 인수1 인수2") #오류메시지 출력
sys.exit() #프로그램 종료. (뒤의 명령문을 수행하지 않고 프로그램을 빠져나가서 다시 명령을 수행하도록 함.)
regionCode = sys.argv[1] #지역 코드(에 인수2를 저장)
rssUrl ="http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp"
values = {
'stnId':regionCode
}
params = parse.urlencode(values) #인코딩 ; 문자열을 바이트단위로 변환하여 저장
url = rssUrl + "?" + params #지역변수를 출력하는 url
print("utl=",url)
▶import문에서 as는 alias의 줄임말로, urllib.request를 req로 사용한다. urllib.parse를 parse로 사용한다.(별칭)
▶rssUrl은 전국날씨 출력하는 rss서비스 url이고,
▶url은 지역날씨 출력하는 rss서비스 url이다.
▶params는 문자열인 regionCode(109)를 바이트단위로 변환하는 인코딩 작업의 결과변수. 즉 바이트단위로 저장됨.
(2) url의 데이터 다운
---------------------------------------------------------------------------------------------------------------------------------
[복사용]
# RSS 데이터 다운로드
data = req.urlopen(url).read() #url주소를 메모리상에 두고 그것을 읽어서 data변수에 저장
text = data.decode() #바이트단위인 data를 디코딩한 문자열을 text변수에 저장.
print(text)
▶ 메모장을 ex04.py로 저장하고 cmd창에 입력해보면 결과값이 나온다.
if) 만약 인수2를 적지 않는다면?
사용법 메시지가 출력되고 프로그램이 종료된다.
파이썬의 urllib 라이브러리를 이용해서 데이터를 가져오는 것은 웹 스크레이핑의 기초!!!이므로 알아둬야 한다.
다음 글에서는
쓸데없는 태그들을 날리는 것 (데이터를 정제하는 과정) 을 beautiful Soup라는 파이썬에서 제공하는 라이브러리를 가지고 해볼 것이다.
'Python' 카테고리의 다른 글
라즈베리파이의 GPIO (0) | 2020.11.06 |
---|---|
Beautiful Soup 사용하여 html 분석하기 (0) | 2020.09.07 |
기상청 날씨 데이터불러오기 (0) | 2020.09.05 |
파이썬을 이용한 웹데이터 다운로드하기2_urlopen() 함수 (0) | 2020.08.28 |
파이썬을 이용한 웹데이터 다운로드하기1_urlretrieve()함수 (0) | 2020.08.28 |