pythonで気象庁の気象データを1年分ずつDLしたいです。以下のコードでDLはできるのですが、複数年DLするのに、毎回出力ファイル名やデータ取得開始・終了日を書き換えなければいけません。数十年分のデータを自動で、年毎にファイルを分けてDLできるようなコードに書き換えたいです。よろしくお願いします。
# -*- coding: utf-8 -*-
import os
import datetime
import csv
import urllib.request
from bs4 import BeautifulSoup
def str2float(weather_data):
try:
return float(weather_data)
except:
return 0
def scraping(url, date):
# 気象データのページを取得
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html)
trs = soup.find("table", { "class" : "data2_s" })
data_list = []
data_list_per_hour = []
# table の中身を取得
for tr in trs.findAll('tr')[2:]:
tds = tr.findAll('td')
if tds[1].string == None:
break;
data_list.append(date)
data_list.append(tds[0].string)
data_list.append(str2float(tds[3].string))
data_list_per_hour.append(data_list)
data_list = []
return data_list_per_hour
def create_csv():
# CSV 出力先ディレクトリ
output_dir = r"C:\Users\taro\Desktop"
# 出力ファイル名
output_file = "2019.csv"
# データ取得開始・終了日
start_date = datetime.date(2019, 1, 1)
end_date = datetime.date(2019, 12, 31)
# CSV の列
fields = ["年月日", "時間", "降水量"]
with open(os.path.join(output_dir, output_file), 'w') as f:
writer = csv.writer(f, lineterminator='\n')
writer.writerow(fields)
date = start_date
while date != end_date + datetime.timedelta(1):
# 対象url(今回は東京)
url = "http://www.data.jma.go.jp/obd/stats/etrn/view/ho … \
"prec_no=44&block_no=47662&year=%d&month=%d&day=%d&view="%(date.year, date.month, date.day)
data_per_day = scraping(url, date)
for dpd in data_per_day:
writer.writerow(dpd)
date += datetime.timedelta(1)
if __name__ == '__main__':
create_csv()
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
関数 create_csv の引数に対象年を追加して、
出力ファイル名とデータ取得開始・終了日を編集する元ネタとする
例)
def create_csv(target_year):
_ output_file = '%d.csv'%target_year
関数 create_csv の呼び出しを数十年分繰り返す
例)
for y in range(2001,2023):
_ create_csv(y)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- その他(プログラミング・Web制作) pythonのpandasのcsvの外部結合(outer_join)した際に列が想定とは異なる事象 1 2022/05/25 13:23
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript gasについて 1 2022/05/31 21:51
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 【VBA】先月分の取得ができない理由が分かりません。 2 2022/04/24 11:16
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#でのswitch文
-
linuxのシェルでファイル名に先...
-
エクセルVBA:日付データの変換...
-
python 気象データの取得
-
Excel VBA グラフ作成のとき...
-
micropythonコード 修正
-
printfの%eで指数部分の桁数を...
-
ポインター引数の関数でコンパ...
-
stable diffusionのエラー
-
10個の実数に対する降順ソート...
-
System.Collections.ArrayList ...
-
CSVデータについての質問です。
-
【Excel VBA】10進数を2進数に...
-
PINVOKEで構造体配列をマーシャ...
-
CakePHP Undefined index
-
PICNICのVB制御プログラム
-
VisualBasicでレジストリキーの...
-
'dataType' 引数を Null にする...
-
エクセルシート名の制限を変更...
-
10Mバイトて文字数に すると何...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
printfの%eで指数部分の桁数を...
-
stable diffusionのエラー
-
ポインター引数の関数でコンパ...
-
エクセルVBA:日付データの変換...
-
C#でのswitch文
-
CreateProcessでの環境変数の設...
-
RegQueryValueExでの2バイト文字
-
'dataType' 引数を Null にする...
-
【Excel VBA】10進数を2進数に...
-
matlabのソースコードをpython...
-
C++ multipart/form-data f
-
Cのプログラムがどうしても動き...
-
テキストファイルの結合について
-
int型(2バイト)データの分割
-
Excel VBA グラフ作成のとき...
-
C言語 構造体の名前欄?を小文...
-
C++/CLIのオブジェクト型配列
-
CSVファイルの行と列のセルって...
-
C言語 ファイル内のデータと入...
-
C言語についてです! 同じ年の...
おすすめ情報
Ogre7077様
ありがとうございます。すみません、試行錯誤していますがなかなか上手くいきません。具体的に修正したコードを教えていただけないでしょうか。よろしくお願いします。