この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
ja:python [2015/06/07 22:20] kota [気象庁HPの各地のアメダス表形式のデータ(.html)から気圧情報を抜き出したい] |
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> | ||
ライン 25: | ライン 26: | ||
soup = BeautifulSoup( open(argvs[1]) ) # fileを開いてパーサー(beautifulsoapに渡す) | soup = BeautifulSoup( open(argvs[1]) ) # fileを開いてパーサー(beautifulsoapに渡す) | ||
trs = soup.find('table', { "id" : "tbl_list" }) # 気圧情報の記されている表(tbl_list)をとってくる | trs = soup.find('table', { "id" : "tbl_list" }) # 気圧情報の記されている表(tbl_list)をとってくる | ||
- | # trsは<tr> ... </tr>で囲まれた部分を1要素とする配列となる | ||
pressure = [] # 各時間の気圧値を入れるための配列を準備 | pressure = [] # 各時間の気圧値を入れるための配列を準備 | ||
- | for tr in trs.findAll('tr')[2:]: # 配列の要素でloop。[2:]は、0,1番目の要素(表のheaderに当たる部分)をスキップするという意味 | + | for tr in trs.findAll('tr')[2:]: # 配列の要素でloop。trs.findAll('tr')はtrsを区切って<tr> ... </tr>で囲まれた部分を |
+ | # 1要素とする配列にしている。 | ||
+ | # [2:]は、0,1番目の要素(表のheaderに当たる部分)をスキップするという意味 | ||
tds = tr.findAll('td') # tdsは<td ...> .... </td>で囲まれた部分を1要素とする配列となる | tds = tr.findAll('td') # tdsは<td ...> .... </td>で囲まれた部分を1要素とする配列となる | ||
pressure.append(tds[len(tds)-1].string) # tdsの最終要素(=気圧情報)を取ってくる | pressure.append(tds[len(tds)-1].string) # tdsの最終要素(=気圧情報)を取ってくる | ||
ライン 39: | ライン 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> | ||
+ | |||
+ |