place_codeA = [44, 62]

place_codeB = [47662, 47772]

place_name = ["東京", "大阪"]

import requests

from bs4 import BeautifulSoup

import csv

 

# URLで年と月ごとの設定ができるので%sで指定した英数字を埋め込めるようにします。

base_url = "http://www.data.jma.go.jp/obd/stats/etrn/view/daily_s1.php?prec_no=%s&block_no=%s&year=%s&month=%s&day=1&view=p1"

 

#取ったデータをfloat型に変えるやつ。(データが取れなかったとき気象庁は"/"を埋め込んでいるから0に変える)

def str2float(str):

  try:

    return float(str)

  except:

    return False

 

if __name__ == "__main__":

  #都市を網羅します

  for place in place_name:

    #最終的にデータを集めるリスト (下に書いてある初期値は一行目。つまり、ヘッダー。)

    All_list = [['年月日','現地気圧(hPa)','海面平均気圧(hPa)','降水量(mm)','1Hr(mm)','1Min(mm)','平均気温(℃)','最高気温(℃)','最低気温(℃)','平均湿度(%)','最低湿度(%)','平均風速(m/s)','最大風速(m/s)','最大風向','最大瞬間風速(m/s)','最大瞬間風向','日照時間(h)','降雪(cm)','最深積雪(cm)','天気概要()','天気概要()']]

    print(place)

    index = place_name.index(place)

    # for文で2000~2021年までの12年間。

    for year in range(2000,2022):

      print(year)

      # その年の1~12月の12回を網羅する。

      for month in range(1,13):

        #2つの都市コードと年と月を当てはめる。

        r = requests.get(base_url%(place_codeA[index], place_codeB[index], year, month))

        r.encoding = r.apparent_encoding

 

        # まずはサイトごとスクレイピング

        soup = BeautifulSoup(r.text)

        # findAllで条件に一致するものをすべて抜き出します。

        # 今回の条件はtrタグでclassmtxなってるものです。

        rows = soup.findAll('tr',class_='mtx')

 

        # 表の最初の1~4行目はカラム情報なのでスライスする。(indexだから初めは0だよ)

        rows = rows[4:]

 

        # 1日〜最終日までの1行を網羅し、取得します。

        for row in rows:

          # 今度はtrのなかのtdをすべて抜き出します

          data = row.findAll('td')

 

          #1行の中には様々なデータがあるので全部取り出す。

 

          rowData = [] #初期化

          rowData.append(str(year) + "/" + str(month) + "/" + str(data[0].string))

          rowData.append(str2float(data[1].string))

          rowData.append(str2float(data[2].string))

          rowData.append(str2float(data[3].string))

          rowData.append(str2float(data[4].string))

          rowData.append(str2float(data[5].string))

          rowData.append(str2float(data[6].string))

          rowData.append(str2float(data[7].string))

          rowData.append(str2float(data[8].string))

          rowData.append(str2float(data[9].string))

          rowData.append(str2float(data[10].string))

          rowData.append(str2float(data[11].string))

          rowData.append(str2float(data[12].string))

          rowData.append(data[13].string)

          rowData.append(str2float(data[14].string))

          rowData.append(data[15].string)

          rowData.append(str2float(data[16].string))

          rowData.append(str2float(data[17].string))

          rowData.append(str2float(data[18].string))

          rowData.append(data[19].string)

          rowData.append(data[20].string)

       

          #次の行にデータを追加

          All_list.append(rowData)

 

    #都市ごとにデータファイル新しく生成して書き出す。(csvファイル形式。名前は都市名)

    with open(place + '.csv', 'w') as file:

      writer = csv.writer(file, lineterminator='\n')

      writer.writerows(All_list)