본문 바로가기
Python/왕초보를 위한 파이썬

11.1. 웹에서 정보 얻기

by 가므자 2012. 4. 12.

* ASP 강좌로 유명한 taeyo.net에 재미있는 강좌가 있어서 파이썬 버전으로 옮겨봅니다.

세계의 인구는 몇명일까요? 미국의 인구 조사 사이트에 가보면 현재의 세계 인구를 알 수 있답니다.

http://www.census.gov/population/popclockworld.html

다음은 세계 인구를 알려주는 웹페이지를 읽어서 인구수를 출력해주는 파이썬 스크립트입니다.

#-*- coding: cp949 -*-

import urllib, re

url = 'http://www.census.gov/population/popclockworld.html'
text = urllib.urlopen(url).read()
pattern = '<div id="worldnumber">([0-9,]+)</div>'
match = re.search(pattern, text)
population = match.group(1)

print '현재 세계의 인구는 %s명입니다' % population

실행시켜보세요!

urllib.urlopen(url)

urllib 모듈의 urlopen() 함수는 인자로 주어진 주소의 웹페이지를 돌려주는데, 이때 리턴되는 객체는 마치 파일처럼 사용할 수가 있습니다. 그래서 read() 함수를 써서 그 내용을 얻어냈지요.

text = urllib.urlopen(url).read()
pattern = '<div id="worldnumber">([0-9,]+)</div>'
match = re.search(pattern, text)
population = match.group(1)

정규표현식(re) 모듈을 이용하여 세계 인구 웹페이지에서 <div>와 </div> 사이에 있는 총인구수만 검색하는 부분입니다. re에 대해서 설명드리자면 길어지니까 아래의 참고 자료를 참고해주세요. ^^;

이렇게해서 웹페이지에서 세계 인구를 얻어오는 프로그램을 만들어보았습니다.

그런데 이 프로그램에는 한 가지 문제점이 있네요. 인구 조사 사이트에서 웹페이지를 한번 얻어오게 되면 그 내용을 기억하고 있다가(다른 말로 캐쉬한다고도 하죠), 다음번에는 기억하고 있는 페이지의 내용을 그대로 사용합니다. 그렇기 때문에 계속 늘어나는 인구를 보여주지 못하고, 계속 똑같은 숫자만 보여주게 되죠.

문제를 해결하려면 urllib보다 좀 더 구체적으로 일을 시킬 수 있는 httplib 모듈을 써서, 세계 인구 페이지를 캐쉬하지 말고 새로 얻어오라고 알려줘야겠네요.

#-*- coding: cp949 -*-

import httplib, re

host = 'www.census.gov'
h = httplib.HTTP(host)
h.putrequest('GET', '/population/popclockworld.html')
h.putheader('Host', host)
h.putheader('Accept', 'text/html')
h.putheader('Cache-Control', 'no-cache')
h.endheaders()

errcode, errmsg, headers = h.getreply()
f = h.getfile()
text = f.read()
f.close()
pattern = '<div id="worldnumber">([0-9,]+)</div>'
match = re.search(pattern, text)
population = match.group(1)
print '현재 세계의 인구는 %s명입니다.' % population

세계 인구야 시시각각으로 늘어나고 있긴 하지만, 4월이 되면 소중한 사람이 한 명 더 태어나서 세계 인구를 늘려줄 겁니다. 엄마 배를 볼록하게 만들고 있는 저희 아이가 밖으로 나오거든요~(나왔습니다 ^O^)


참고:
파이썬으로 하는 웹 클라이언트 프로그래밍
정규표현식, Dive into Python

관련 게시물:
http://pythonlab.org/bbs/view.php?id=python&no=6
http://bbs.python.or.kr/viewtopic.php?p=73907&sid=98857f146c95971bb5d7e3b923116144

출처 : wikidocs 왕초보를 위한 파이썬

'Python > 왕초보를 위한 파이썬' 카테고리의 다른 글

13.3. 파이썬에서 MySQL 사용하기  (0) 2012.04.12
11. 네트워크  (0) 2012.04.12
10.1. DIR 흉내내기  (0) 2012.04.12
10. 시스템  (0) 2012.04.12
9.1. Tkinter에서 마우스 이벤트 처리  (0) 2012.04.12

댓글