質問: 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で中身だけ取り出せれば良い物だと思うのですが、全くやり方がわかりません。 右も左も分からないレベルに初心者なので、エンジニアの方が想定している考え方が全くできていないと思いますが、ご回答していただければ幸いです。
回答: find_all(), find() に text 引数を指定することで、指定した値を持つ要素を検索できます。 この指定には正規表現が利用できるので、次のようにしてみてはどうでしょうか。 ``` import re import urllib.request from bs4 import BeautifulSoup url = 'http://yume-uranai.jp/keyword.php?keyword=%8C%A2&q=1' html = urllib.request.urlopen(url) soup = BeautifulSoup(html, 'html.parser') # 要素名が strong で値に犬または猫を含む要素を抽出 elems = soup.find_all('strong', text=re.compile('(犬|猫)')) # 結果 for elem in elems: print(elem.string) ``` ``` 犬 子犬 犬に噛まれる 犬を飼う 犬と散歩する 大型犬 犬に吠えられる 犬と遊ぶ 犬を躾ける 愛犬 ```