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

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

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

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

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

1441閲覧

気象庁データのスクレイピングをしています

Yuiti628

総合スコア71

スクレイピング

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

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

2クリップ

投稿2020/05/26 14:32

気象庁データ(降水量)をスクレイピングを行おうと思います。
https://www.data.jma.go.jp/obd/stats/etrn/view/monthly_s3.php?prec_no=11&block_no=47401&year=2020&month=1&day=&view=p5

このサイトから表の数値と月だけのlistの作成が目標です。
下記のコードで表の場所まではとってこれたのですが、このあとどのようにして「赤枠」だけを取得できるのか困っています。

python3

1r = requests.get(f"https://www.data.jma.go.jp/obd/stats/etrn/view/monthly_s3.php?prec_no=11&block_no=47401&year=&month=&day=&view=p5") 2soup = BeautifulSoup(r.content, "html.parser") 3areas = soup.find_all(id="tablefix1")

イメージ説明

スクレイピングとwebの初心者で指定方法など慣れておりません。
宜しくおねがします

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

pandasおまかせワザなのでスクレイピングの勉強にはなりません。こういうことも出来るという参考まで。

python3

1import pandas as pd 2url = "https://www.data.jma.go.jp/obd/stats/etrn/view/monthly_s3.php?prec_no=11&block_no=47401&year=&month=&day=&view=p5" 3dfs = pd.read_html(url)[0] 4print(dfs[['年','1月','2月']]) 5 6 年 1月 2月 70 1938 42.6 47.2 81 1939 38.0 26.7 92 1940 98.5 48.5 103 1941 83.1 83.8 114 1942 59.0 70.6 12.. ... ... ... 1378 2016 118.5 115.5 1479 2017 47.5 37.5 1580 2018 122.0 75.0 1681 2019 56.0 46.5 1782 2020 35.0 39.5 18

投稿2020/05/26 15:23

編集2020/05/26 15:25
x98000

総合スコア1096

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yuiti628

2020/05/26 16:38

pandasは神でした 笑 これはこれでありなので、次回はこれを使います。 ありがとうございます
guest

0

HTMLの構造をどの程度ご存知かわかりませんが、まずはソースコードを眺めて法則を見つけてください。

  • 表の1行は<tr>で始まり、</tr>で終わっている。
  • 年は<a></a>に囲まれている
  • 月ごとのデータは<td></td>に囲まれている

例としていくつか挙げましたが、こういったパターンを見つけて、目的となる場所を抽出してみてください。

ちなみに、少しググればいくらでもBeautiful Soupを使ってテーブルをスクレイピングしている例が出てくると思いますよ。

投稿2020/05/26 14:43

Takumiboo

総合スコア2536

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yuiti628

2020/05/26 16:44

年 : areas1[1].find_all('a')[0].get_text() 降水量 : areas1[1].find_all('td')[1].get_text() これで取得ができました 少しググって分からなかったのですが、ここまで深いものなんでしょうか?
Takumiboo

2020/05/27 01:06

深いもの、とはどういうことでしょう? 情報を抽出する難易度はサイトの構造よって大きく変わりますが、基本的には回答したような流れになるかと思います。 もちろんそれを簡単にするライブラリなどもあるので、実際にはいろいろ活用することになるとは思いますが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問