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

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

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

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

Beautiful Soup

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

Python

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

Q&A

解決済

2回答

758閲覧

スクレイピング beautifulsoup

k888

総合スコア123

スクレイピング

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

Beautiful Soup

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

Python

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

0グッド

0クリップ

投稿2021/05/16 09:21

編集2021/05/16 09:31

実現したいこと

beautifulsoupを用いたスクレイピングで、soup.findしたものをさらにsoup.findして目的の要素を取り出したい。

例えば,以下のhtmlで本のタイトルを取得したいとき、

html

1<div class="wrapper"> 2 <div class="book"> 3 <div class="title">タイトル:python</div> 4 <div class="price">値段:1000円</div> 5 <div class="publisher">出版社:python出版</div> 6 </div> 7 <div class="book"> 8 <div class="title">タイトル:Java</div> 9 <div class="price">値段:2000円</div> 10 <div class="publisher">出版社:Java出版</div> 11 </div> 12 <div class="book"> 13 <div class="title">タイトル:C</div> 14 <div class="price">値段:3000円</div> 15 <div class="publisher">出版社:C出版</div> 16 </div> 17 <div class="book"> 18 <div class="title">タイトル:html</div> 19 <div class="price">値段:4000円</div> 20 <div class="publisher">出版社:html出版</div> 21 </div> 22</div> 23

このようにしたい

python

1#全ての本の情報をbook_listに入れる 2book_list = soup.find_all("div", class_="book") 3 4#book_listから欲しい情報を取り出す 5for i in range(4): 6 title = book_list[i].find("div", class_="title") 7 print(title) 8

しかし、上のコードは間違っており、うまく動かない。

soup.findしたものをさらにsoup.findして目的の要素を取り出すという処理をするコードの書き方がわかりません。ご教授お願いします。

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

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

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

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

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

guest

回答2

0

こんばんは。

問題文拝見しました。

こんな感じでしょうか?

Python

1 2from bs4 import BeautifulSoup 3 4html = """<div class="wrapper"> 5 <div class = "book"> 6 <div class = "title"> タイトル:python </div> 7 <div class = "price"> 値段:1000円 </div> 8 <div class = "publisher"> 出版社:python出版 </div> 9 </div> 10 <div class = "book"> 11 <div class = "title"> タイトル:Java</div> 12 <div class = "price"> 値段:2000円</div> 13 <div class = "publisher"> 出版社:Java出版</div> 14 </div> 15 <div class = "book"> 16 <div class = "title"> タイトル:C</div> 17 <div class = "price"> 値段:3000円</div> 18 <div class = "publisher"> 出版社:C出版</div> 19 </div> 20 <div class = "book"> 21 <div class = "title"> タイトル:html</div> 22 <div class = "price"> 値段:4000円</div> 23 <div class = "publisher"> 出版社:html出版</div> 24 </div> 25</div >""" 26 27soup = BeautifulSoup(html, "html.parser") 28 29book_list = soup.find_all("div", class_="book") 30for book in book_list: 31 print(book.find("div", class_="title").text) 32  print(book.find("div", class_="price").text) 33

ご確認のほど、よろしくお願いいたします。????‍♂️

投稿2021/05/16 09:48

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

k888

2021/05/16 13:41

回答ありがとうございます。
退会済みユーザー

退会済みユーザー

2021/05/16 18:46

解決してよかったです。 また困ったこととかありましたら、気軽にご相談ください〜
k888

2021/05/18 12:23

ありがとうございます!
guest

0

ベストアンサー

以下のようにします。

python

1>>> book_list = soup.find_all("div", class_="book") 2>>> for book in book_list: 3... title = book.find("div", class_="title") 4... print(title) 5... 6<div class="title">タイトル:python</div> 7<div class="title">タイトル:Java</div> 8<div class="title">タイトル:C</div> 9<div class="title">タイトル:html</div>

book_listはbs4.element.ResultSet型のオブジェクトでイテレータを生成しますので、こういう使い方になります。

投稿2021/05/16 09:40

編集2021/05/16 09:43
ppaul

総合スコア24670

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

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

k888

2021/05/16 13:41

回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問