気象庁の気象データ、年ごとの値をスクレイピングしたい
こんにちは。
気象動向をスクレイピングで調査してみたいのですが、データをCSVにうまく出力できず、困っております。
プログラミング初心者なので、簡単なミスが原因かもしれません。
もし原因がわかる方がいらしゃいましたら、教えていただけますでしょうか。不慣れながら、Githubの方にもアップロードしています。もしよければお使いください。(うまくできていなかったら申し訳ないです)
https://github.com/yamaplay/weather-scraping
CSV自体はそれぞれの地域ごとに作成されるものの、webからデータを一切抽出できていない
エラーメッセージなどは表示されず、9つの(地域名).csvがそれぞれ生成されます。しかし、All_listの中身がカラムとして1行目に存在するだけで、実際のデータはcsvに出力されていない状態です。おそらく、スクレイピングそのものが実行されていないか、データの指定を間違えているのだと思います。エラーが表示されているわけでもなく、どのように対処したらよいのか行き詰っています。
ソースコード
place_name = ["札幌", "秋田", "新潟", "東京", "大阪", "広島", "高知", "熊本", "那覇"] place_codeA = [14, 32, 54, 44, 62, 67, 74, 86, 91] place_codeB = [47412, 47582, 47604, 47662, 47772, 47765, 47893, 47819, 47936] import requests from bs4 import BeautifulSoup import csv base_url = "http://www.data.jma.go.jp/obd/stats/etrn/view/annually_s.php?prec_no=%s&block_no=%s&year=2021&month=1&day=1&view=p1" def str2float(str): try: return float(str) except: return 0.0 if __name__ == "__main__": for place in place_name: All_list = [['年', '陸の平均気圧(hPa)', '海の平均気圧(hPa)', '降水量(mm)', '平均気温(℃)','最高気温(℃)', '最低気温(℃)', '平均湿度(%)']] print(place) index = place_name.index(place) r = requests.get(base_url%(place_codeA[index], place_codeB[index])) r.encoding = r.apparent_encoding soup = BeautifulSoup(r.text) rows = soup.findAll('tr',class_='mtx') rows = rows[3:] for row in rows: data = row.findAll('td') rowData = [] rowData.append(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[7].string)) rowData.append(str2float(data[10].string)) rowData.append(str2float(data[11].string)) rowData.append(str2float(data[12].string)) All_list.append(rowData) with open(place + '.csv', 'w') as file: writer = csv.writer(file, lineterminator='\n') writer.writerows(All_list)
補足、参考
参考にしているサイトは以下の通りです。
GoogleColaboratoryで気象庁の過去気象データをスクレイピングしてみた。
https://qiita.com/Cyber_Hacnosuke/items/122cec35d299c4d01f10
(このサイトのコード通りに実行してみましたが、そちらの方はうまくいきました。)
スクレイピングしたいサイト
http://www.data.jma.go.jp/obd/stats/etrn/view/annually_s.php?prec_no=44&block_no=47662&year=2021&month=1&day=1&view=p1

回答3件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2022/02/24 07:52