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

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

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

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

Python 3.x

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

解決済

BeautifulSoup4のfind_allでタグの中の文章が取得できない

hhhhhhhhh
hhhhhhhhh

総合スコア13

Beautiful Soup

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

Python 3.x

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

2回答

0評価

0クリップ

24628閲覧

投稿2018/12/20 15:44

前提・実現したいこと

<strong style="color:#C84B00;font-size: 16px;"></strong>
<strong style="color:#C84B00;font-size: 16px;"></strong>
上記で言う「犬」「猫」のような
複数の要素を持つタグに含まれている、内容だけを取得したいです。※idやclassがありません。
(本来はこちらのソースを取得しています)

発生している問題・エラーメッセージ

複数の該当する内容を取得したいので.find_all()を利用しています。
詳細は該当のソースコードに記載しています。

"ResultSet object has no attribute '%s'. You're probably treating a list of items like a single item. Did you call find_all() when you meant to call find()?" % key AttributeError: ResultSet object has no attribute 'text'. You're probably treating a list of items like a single item. Did you call find_all() when you meant to call find()? Exited with status 1 after 0.26 seconds

該当のソースコード

python3

import urllib.request from bs4 import BeautifulSoup html = urllib.request.urlopen("http://yume-uranai.jp/keyword.php?keyword=%8C%A2&q=1") soup = BeautifulSoup(html, "html.parser") title = soup.find_all("strong",style="color:#C84B00;font-size: 16px;") print(title.text)

調べたこと

この質問では、.stringの位置が違うんじゃないか?と言う回答が寄せられていました。
.stringは、.textと違い、1つの要素の時に使うものだと認識しております。
こちらを読みましたが、まだよく理解していません。とりあえず、.textが大味な意味で使える物と言う認識もしています。
質問を参考に.textの位置を変えて見ました。

title = soup.find_all("strong",style="color:#C84B00;font-size: 16px;".text) print(title)

もしくはこちらも

title = soup.find_all("strong",style="color:#C84B00;font-size: 16px;").text print(title)

どちらとも最初と同じエラーメッセージが出ます。

しかし、print(title)を使わずに、このようにforで1つずつ取り出すと正しく中身だけを抜くことができました。

for i in title: print(i.text)

以下の参考にした記事全て、このようなfor文での書き方はしていません。
https://qiita.com/itkr/items/513318a9b5b92bd56185
https://qiita.com/connectcrew-ishii/items/6ad316ea854326c536a6
http://python.zombie-hunting-club.com/entry/2017/11/08/192731

僕の調べ方が悪いのか、また分からなさすぎて理解が足りていないだけなのか、恐らくその両方だと思いますが
forを使わずに、find_allで文章だけ取得することは不可能なのでしょうか?
僕はこの結果を配列に格納したいのですが、せっかくfind_allで取得した、タグも含まれている配列をfor文で出力し
また別の配列に入れなければなりません。
最初から、find_allで中身だけ取り出せれば良い物だと思うのですが、全くやり方がわかりません。

右も左も分からないレベルに初心者なので、エンジニアの方が想定している考え方が全くできていないと思いますが、ご回答していただければ幸いです。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Beautiful Soup

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

Python 3.x

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