前提・実現したいこと
<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
1import urllib.request 2from bs4 import BeautifulSoup 3html = urllib.request.urlopen("http://yume-uranai.jp/keyword.php?keyword=%8C%A2&q=1") 4soup = BeautifulSoup(html, "html.parser") 5title = soup.find_all("strong",style="color:#C84B00;font-size: 16px;") 6print(title.text) 7
調べたこと
この質問では、.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で中身だけ取り出せれば良い物だと思うのですが、全くやり方がわかりません。
右も左も分からないレベルに初心者なので、エンジニアの方が想定している考え方が全くできていないと思いますが、ご回答していただければ幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。