지난번에 아주 단순 무식하게 HTML을 파싱해서 날씨 가져오는 스크립트를 포스팅 한 적이 있었는데,
도저히 코드를 봐줄 수도 없고.. 심지어 그 코드에는 심각한 문제가 있었다!
(문제는 비밀입니다.. 궁금하신분은 한번 알아보세요ㅋ 힌트는 리눅스의 권한)
어쨌든 그래서 새로운 코드를 다시 짜 보았다.
역시 코드가 딱히 마음에 들진 않지만.. BeautifulSoup을 처음으로 사용하는 거라 그렇다고 위안말도안되는 변명을 하며....
#!/usr/bin/env python #-*- coding:utf-8 -*- import urllib from BeautifulSoup import BeautifulSoup import traceback from time import localtime, strftime def display(result): print print 'Weather in Seoul, Asia at ' + strftime('%H:%M', localtime()) + '\n' print 'Condition: ' + result['cond'] print 'Temparature: ' + result['temp'] + u"\N{DEGREE SIGN}" + 'C' print 'RealFeel: ' + result['realfeel'] + u"\N{DEGREE SIGN}" + 'C' print result['humid'] print result['cloud'] print def main(): html = urllib.urlopen("http://www.accuweather.com/en/kr/seoul/226081/current-weather/226081") soup = BeautifulSoup(html) soup = soup.find('div', {'id':'detail-now'}) result = {} while soup: if soup.get('class') == 'cond': result['cond'] = soup.text elif soup.get('class') == 'temp': result['temp'] = soup.text.replace("°", "") elif soup.get('class') == 'realfeel': s = soup.text.replace("°", "") result['realfeel'] = s.replace("RealFeel® ", "") elif soup.get('cellspacing') == None and soup.get('class') == 'stats': ss = soup.findAll('li') for li in ss: if 'Humid' in li.text: result['humid'] = li.text.replace(":", ": ") elif 'Cloud' in li.text: result['cloud'] = li.text.replace(":", ": ") break soup = soup.findNext() display(result) if __name__ == "__main__": try: main() except: traceback.print_exc()
뭐 어찌됐든 쓸데없는 쓰레기 파일을 만들지도 않고... 더 고치기는 너무 귀찮으니 BeautifulSoup 라이브러리는 언젠가 나중에 더 익숙해지기로 하고 일단 저렇게 써야겠다.
날씨를 가져오는 accuweather.com 해당 페이지의 사이즈가 커서 여전히 속도 문제는 어쩔 수 없는듯하다.
인터넷을 연결해야하는데다가 외국 사이트라 느린 것도 같지만 분단위로 날씨를 업데이트! 해주니 그걸로 만족해야겠다.
'Programming > Python' 카테고리의 다른 글
A* algorithm implementation (1) | 2013.06.14 |
---|---|
pygame 설치 (0) | 2013.05.02 |
날씨 가져오는 스크립트 (0) | 2013.04.17 |
쉬워 보이는 언어 Python (0) | 2011.12.27 |
점프 투 파이썬(Jump to Python) (0) | 2011.12.20 |