質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

気象庁のスクレイピングにおいて、CSVにデータをうまく出力できない

humanbeing
humanbeing

総合スコア7

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

3回答

0評価

0クリップ

933閲覧

投稿2022/02/23 09:06

気象庁の気象データ、年ごとの値をスクレイピングしたい

こんにちは。

気象動向をスクレイピングで調査してみたいのですが、データを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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。