この文書の現在のバージョンと選択したバージョンの差分を表示します。
次のリビジョン | 前のリビジョン | ||
ja:python [2015/06/07 21:52] kota 作成 |
ja:python [2015/06/10 19:59] (現在) kota [気象庁HPの各地のアメダス表形式のデータ(.html)から気圧情報を抜き出したい] |
||
---|---|---|---|
ライン 7: | ライン 7: | ||
* http://www.jma.go.jp/jp/amedas_h/today-61286.html?areaCode=000&groupCode=44 | * http://www.jma.go.jp/jp/amedas_h/today-61286.html?areaCode=000&groupCode=44 | ||
* 先にwgetでとってきておいて、名前を 20150401.htmlとかに変えておく | * 先にwgetでとってきておいて、名前を 20150401.htmlとかに変えておく | ||
+ | * 以下 GetPressure.py のコード | ||
<code python> | <code python> | ||
#coding:utf-8 | #coding:utf-8 | ||
- | ### 引数に元のhtmlをfull pathで渡す ( ./GetPressure.py /home/aaa/..../bbb/20150401.html ) | + | ### 引数にパースしたいhtmlをfull pathで渡す ( ./GetPressure.py /home/aaa/..../bbb/20150401.html ) |
import sys | import sys | ||
ライン 23: | ライン 24: | ||
quit() | quit() | ||
- | soup = BeautifulSoup( open(argvs[1]) ) | + | soup = BeautifulSoup( open(argvs[1]) ) # fileを開いてパーサー(beautifulsoapに渡す) |
- | trs = soup.find('table', { "id" : "tbl_list" }) | + | trs = soup.find('table', { "id" : "tbl_list" }) # 気圧情報の記されている表(tbl_list)をとってくる |
pressure = [] # 各時間の気圧値を入れるための配列を準備 | pressure = [] # 各時間の気圧値を入れるための配列を準備 | ||
- | for tr in trs.findAll('tr')[2:]: | + | for tr in trs.findAll('tr')[2:]: # 配列の要素でloop。trs.findAll('tr')はtrsを区切って<tr> ... </tr>で囲まれた部分を |
- | tds = tr.findAll('td') | + | # 1要素とする配列にしている。 |
- | pressure.append(tds[len(tds)-1].string) | + | # [2:]は、0,1番目の要素(表のheaderに当たる部分)をスキップするという意味 |
+ | tds = tr.findAll('td') # tdsは<td ...> .... </td>で囲まれた部分を1要素とする配列となる | ||
+ | pressure.append(tds[len(tds)-1].string) # tdsの最終要素(=気圧情報)を取ってくる | ||
f = open("/home/aaa/..../bbb/Pressure.dat","a") # 出力先ファイルを開く("a"は追記モード) | f = open("/home/aaa/..../bbb/Pressure.dat","a") # 出力先ファイルを開く("a"は追記モード) | ||
ライン 38: | ライン 41: | ||
f.close() | f.close() | ||
+ | </code> | ||
+ | 以下のようなscript GetPress.sh | ||
+ | <code bash> | ||
+ | #!/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; | ||
</code> | </code> | ||
+ | |||
+ | を書いて、cron で例えば | ||
+ | |||
+ | ''50 0 * * * /home/aaa/..../bbb/GetPress.sh >& /dev/null'' | ||
+ | |||
+ | のようにして毎日0:50に実行するようにしておけば良い。 | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== shell command を実行したい ===== | ||
+ | subprocessを使う。 | ||
+ | <code python> | ||
+ | import subprocess | ||
+ | |||
+ | subprocess.call(["ls","-l"]) # スペース区切りで区切った文字列のlistを渡す | ||
+ | ### または | ||
+ | # cmd = "ls -l" | ||
+ | # subprocess.call(cmd.strip().split(" ")) | ||
+ | ### でも同じ | ||
+ | </code> | ||
+ | |||
+ |