pusuke0418’s diary

すごく暇なSEのぶろぐ

Yahoo!天気からピンポイントの天気データを取得してちょっと整える

パソコンから天気を読み上げようと思ってデータを取ってみた

python2.7とBeautifulSoupを使ってぱっととってくる。そして、下記のような出力をファイルに得る。東京都は北区。ファイル名は日付.txt

0時,曇り,気温8度,湿度82度,降水量0,風静穏0
3時,曇り,気温7度,湿度97度,降水量0,風北北西2
6時,晴れ,気温6度,湿度96度,降水量0,風北西1
9時,晴れ,気温10度,湿度87度,降水量0,風北北東1
12時,晴れ,気温16度,湿度57度,降水量0,風南東2
15時,晴れ,気温19度,湿度48度,降水量0,風南2
18時,曇り,気温15度,湿度63度,降水量0,風南2
21時,晴れ,気温11度,湿度74度,降水量0,風北西1

下記。とりあえずできた版

import os
import re
import datetime
from urllib import urlopen
from bs4 import BeautifulSoup

target_url = urlopen('http://weather.yahoo.co.jp/weather/jp/13/4410/13117.html')
soup = BeautifulSoup(target_url)

objdiv = soup.find('div', attrs={'id' :'yjw_pinpoint_today'})
trlist = objdiv.findAll("tr")

result = {}
p = re.compile(r'<.*?>')

tenkilist = ["jikan", "tenki", "kion", "shitsudo", "kosuiryo", "kaze"]
n = 0
for i in tenkilist:
   result[i] = p.sub("",str(trlist[n])).split("\n")
   while result[i].count("") > 0:
      result[i].remove("")
   n+=1

kaze2 = []
kaze2.append(str(result["kaze"][0]))
for i in range(1,len(result["kaze"]),2):
    kaze2.append(str(result["kaze"][i] + result["kaze"][i+1]))

d = datetime.datetime.today()
today = d.strftime("%Y%m%d")

f = open(today+".txt", "ab")
for i in range(1, len(result["jikan"])):
   f.write(str(result["jikan"][i])+",")
   f.write(str(result["tenki"][i])+",")
   f.write("気温" + str(result["kion"][i]) + "度"+",")
   f.write("湿度" + str(result["shitsudo"][i]) + "度"+",")
   f.write("降水量" + str(result["kosuiryo"][i])+",")
   f.write("風" + str(kaze2[i]))
   f.write("\n")
f.close()

参考

『orangain flavor』「Pythonでクローリング・スクレイピングに使えるライブラリいろいろ」
http://orangain.hatenablog.com/entry/scraping-in-python

『Beautiful Soup 4.2.0 Doc. 日本語訳 (2013-11-19最終更新) 』
http://kondou.com/BS4/

『18th Tech Note』「PythonでHTMLタグを除去する方法」
http://www.18th-technote.com/post/5987200384/python-django

『no workaround』「python リストから空の要素を削除 」
http://j4f-note.blogspot.jp/2012/04/python.html