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

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

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

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

Beautiful Soup

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

Python

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

HTML

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

Q&A

解決済

2回答

3811閲覧

気象庁データのスクレイピング

Yuiti628

総合スコア71

スクレイピング

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

Beautiful Soup

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

Python

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

HTML

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

0グッド

1クリップ

投稿2020/05/25 11:11

気象庁データのスクレイピングを行おうと思います。

https://www.data.jma.go.jp/obd/stats/etrn/select/prefecture.php?prec_no=11

このサイトで各地方の観測所番号(block_no)の入手に困っています。

<map name="point"> <area alt="稚内" ," onmouseover="javascript:viewPoint('s','47401','稚内','ワツカナイ','45','24.9','141','40.7','2.8','1','1','1','1','1','9999','99','99','','','','','');" shape="rect"/> <area alt="稚内" ," onmouseover="javascript:viewPoint('s','47401','稚内','ワツカナイ','45','24.9','141','40.7','2.8','1','1','1','1','1','9999','99','99','','','','','');" shape="rect"/> <area alt="稚内" ," onmouseover="javascript:viewPoint('s','47401','稚内','ワツカナイ','45','24.9','141','40.7','2.8','1','1','1','1','1','9999','99','99','','','','','');" shape="rect"/> <area alt="宗谷地方全地点" coords="10,10,124,27" href="../index.php?prec_no=11&amp;block_no=00&amp;year=&amp;month=&amp;day=&amp;view=" shape="rect"/> <area alt="網走・北見・紋別地方" coords="367,287,510,302" href="prefecture.php?prec_no=17&amp;block_no=&amp;year=&amp;month=&amp;day=&amp;view=" shape="rect"/> </map>

大部分を省略

soup = BeautifulSoup(r.content, "html.parser")
areas = soup.find_all('area')

BeautifulSoupを使って抜き出しているのですが、『onmouseover="javascript:viewPoint・・・ 』がない要素もあります。
onmouseoverがある行だけを抜き出したいのですが、どのように指定すれば良いのでしょうか?

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

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

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

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

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

guest

回答2

0

スクレイピングからはそれますが、

観測所番号(block_no)

とありますが、当該HTML内のblock_noは観測所番号ではないのではないでしょうか。
「地域気象観測所一覧」に観測所番号の一覧(pdf)があります。
これによると、稚内、沓形の観測所番号はそれぞれ11016、111151となっています。
当該HPのHTMLをみると、稚内、沓形ののblock_noはそれぞれ47401、0002となっており、さらに他の観測所のblock_noもバラバラな気がします。

投稿2020/05/25 12:04

ikapy

総合スコア1167

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

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

Yuiti628

2020/05/25 12:19

ありがとうございます。 どうやら、地域気象観測所一覧とはwebのものでは所々、block_noや、経度緯度が異なるところがあるみたいです。 私の目標としては、全地域から降水量のデータを取得することです。 そのため、block_noやprec_noなどを取得しようとしている段階です。 そこでコードを書いているのですが、綺麗に取得できる方法がないかなと思って質問しております。
ikapy

2020/05/25 12:24

そうでしたか。スクレイピングはお役に立てそうもありませんが頑張ってください。
guest

0

ベストアンサー

onmouseoverがある行だけを抜き出したいのですが、どのように指定すれば良いのでしょうか?

全部取得して、onmouseoverがなければ無視すれば良いのでは?

#追記

Python

1全部取得して、onmouseoverがなければ無視 2area = [tag for tag in soup.find_all("area") if tag.has_attr("onmouseover")] 3 4条件で何とかする 5area = soup.find_all(lambda tag: tag.name=="area" and tag.has_attr("onmouseover"))

投稿2020/05/25 11:15

編集2020/05/25 12:13
otn

総合スコア84499

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

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

Yuiti628

2020/05/25 11:23

その方法でも良いのですが、1行で抽出する方法がないのかと探しています(T . T)
otn

2020/05/25 11:43 編集

リストの内包表記は普通は1行で書くと思います。
Yuiti628

2020/05/25 12:04

すいません。 areas = soup.find_all('area') この文を1行で完結できるようにしたかったのです。 内包表記と上の文の2行になりますので
otn

2020/05/25 12:13

普通、1行で書きます。
otn

2020/05/25 12:16

とりあえず、2パターン書きましたが、どちらにするかは好みでしょうか。
Yuiti628

2020/05/25 12:26

ありがとうございます!! このように書くのですね。 大変参考になりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問