Deprecated: Array and string offset access syntax with curly braces is deprecated in /mnt/hep_web/hep_web/member/n-kota/dokuwiki/inc/init.php on line 542
====== pythonの備忘録 ======
----
===== 気象庁HPの各地のアメダス表形式のデータ(.html)から気圧情報を抜き出したい =====
* http://www.jma.go.jp/jp/amedas_h/today-61286.html?areaCode=000&groupCode=44
* 先にwgetでとってきておいて、名前を 20150401.htmlとかに変えておく
* 以下 GetPressure.py のコード
#coding:utf-8
### 引数にパースしたいhtmlをfull pathで渡す ( ./GetPressure.py /home/aaa/..../bbb/20150401.html )
import sys
from bs4 import BeautifulSoup
argvs = sys.argv
argc = len(argvs)
if (argc != 2):
print "Usage : python %s filename.html"%argvs[0]
quit()
soup = BeautifulSoup( open(argvs[1]) ) # fileを開いてパーサー(beautifulsoapに渡す)
trs = soup.find('table', { "id" : "tbl_list" }) # 気圧情報の記されている表(tbl_list)をとってくる
pressure = [] # 各時間の気圧値を入れるための配列を準備
for tr in trs.findAll('tr')[2:]: # 配列の要素でloop。trs.findAll('tr')はtrsを区切って ...
で囲まれた部分を
# 1要素とする配列にしている。
# [2:]は、0,1番目の要素(表のheaderに当たる部分)をスキップするという意味
tds = tr.findAll('td') # tdsは .... | で囲まれた部分を1要素とする配列となる
pressure.append(tds[len(tds)-1].string) # tdsの最終要素(=気圧情報)を取ってくる
f = open("/home/aaa/..../bbb/Pressure.dat","a") # 出力先ファイルを開く("a"は追記モード)
f.write("\n")
f.write(argvs[1].replace("/home/aaa/..../bbb/","").replace(".html","")) # 日付部分をファイルに書き込み
for x in pressure :
f.write( " " + x.replace(u"\xa0"," ")) # 各時間の気圧をスペース区切りでファイルに書き込み
f.close()
以下のようなscript GetPress.sh
#!/bin/bash
wget --directory-prefix=/home/aaa/..../bbb 'http://www.jma.go.jp/jp/amedas_h/today-61286.html?areaCode=000&groupCode=44';
mv /home/aaa/..../bbb/'today-61286.html?areaCode=000&groupCode=44' /home/aaa/..../bbb/`date -d '1 days ago' +%Y%m%d`.html;
python /home/aaa/..../bbb/GetPressure.py /home/aaa/..../bbb/`date -d '1 days ago' +%Y%m%d`.html;
を書いて、cron で例えば
''50 0 * * * /home/aaa/..../bbb/GetPress.sh >& /dev/null''
のようにして毎日0:50に実行するようにしておけば良い。
----
===== shell command を実行したい =====
subprocessを使う。
import subprocess
subprocess.call(["ls","-l"]) # スペース区切りで区切った文字列のlistを渡す
### または
# cmd = "ls -l"
# subprocess.call(cmd.strip().split(" "))
### でも同じ