지난번에 아주 단순 무식하게 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 해당 페이지의 사이즈가 커서 여전히 속도 문제는 어쩔 수 없는듯하다.
인터넷을 연결해야하는데다가 외국 사이트라 느린 것도 같지만 분단위로 날씨를 업데이트! 해주니 그걸로 만족해야겠다.