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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Beautiful Soup

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

3825閲覧

BeautifulSoupで親子関係にあるタグの取得方法

dotnet

総合スコア25

Beautiful Soup

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/07/10 04:44

OS Windows 10 Pro 64bit
Python 3.6.8

お世話になっております。

<〇〇産> <野菜> <品名>トマト</品名> <価格>100</価格> </野菜> <野菜> <品名>あまいトマト</品名> <価格>200</価格> </野菜> <野菜> <品名>やわらかいトマト</品名> <価格>300</価格> </野菜> </〇〇産>

このような形式のデータがあり、これを

〇〇産 トマト 100 〇〇産 あまいトマト 200 〇〇産 やわらかいトマト 300

このような出力結果にしてcsvに出力しようとしています。

産地一覧 = soup.find_all("〇〇産") 野菜一覧 = soup.find_all("野菜") 品名一覧 = soup.find_all("品名") 価格一覧 = soup.find_all("価格") for 産地 in 産地一覧: for 野菜 in 野菜一覧: for 品名 in 品名一覧: for 価格 in 価格一覧: 

のようにした場合、SQLでいうcross joinのような結果となってしまいます。このように「1度取得した親を子の数だけ繰り返し出力したい」かつ「複数の子(兄弟?)を取得したい」場合はどのようにアプローチすれば良いでしょうか?宜しくお願い致します。

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

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

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

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

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

meg_

2020/07/10 12:40

産地一覧.find_all("野菜")のようにすれば子要素が取得できるはずです。
dotnet

2020/07/11 01:13

ご回答ありがとうございます。 産地一覧.find_all("野菜")で野菜の一覧は取得できたのですが、その下の階層にある品名・価格の取得方法が分かりませんでした。 産地一覧.find_all("野菜") 産地一覧.find_all("品名") 産地一覧.find_all("価格") このようにするとfind_allの中身を取り出すのにforを使わないといけなくて、forを使うと全組み合わせを取得してしまう状態です。
meg_

2020/07/11 01:28

同様にすれば良いです。親要素.find_all(子要素のタグ名)のようにすれば良いということです。 色々試して理解しましょう。
dotnet

2020/07/11 04:09

ありがとうございます。try & errorで漸く解決に至りました。頂いたアドバイスが無ければ解決にたどり着けませんでした。本当にありがとうございました。
guest

回答1

0

自己解決

meg_さま、アドバイスありがとうございました。

「子要素=親要素.find_all("hoge")」で取り出せるようになりました。単純に

Python

1野菜一覧=soup.find_all("野菜") 2子要素=親要素.find_all("hoge")

と列記するのではなく

Python

1野菜一覧=soup.find_all("野菜") 2 3for 野菜 in 野菜一覧: 4 hoge一覧=野菜.find_all("hoge")

のように子要素を取得する場所に工夫が必要でした。
大変勉強になりました。ありがとうござました。

投稿2020/07/11 04:10

dotnet

総合スコア25

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問