62797


PythonでBeautifulSoupを使って、findを使って特定のclassのテキストを取得しようと思ったのですが、違うクラスの中の特定のクラスも取得してしまうので、二回findを使おうと思ったのですが、エラーが出てきてしまいました。

ソースコード

[code]

    <div class="hoge">
        <div class="piyo"></div>
    </div>
    <div class="hogehoge">
        <div class="piyo"></div>
    </div>
    
[/code]

これのhogeの中のpiyoだけを取得したいのですが、

[code]

    soup.find_all('div', 'hoge').find('div', 'piyo')
    
[/code]

と

[code]

     ex = soup.find_all('div', 'hoge')
        ex.find_all('div', 'piyo')
    
[/code]

を試したのですがうまくいきませんでした。  
何か良い方法はありませんか？  
初心者ですみません。

追記  
エラーはこのように出ました。

[code]

    AttributeError: ResultSet object has no attribute 'find_all'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?
    
[/code]


CC BY-SA 4.0
2020-02-05T05:07:10.590
62793
2020-04-06T06:31:08.347
2020-04-06T06:31:08.347
3060
37613
question
python3 web-scraping beautifulsoup
BeautifulSoupで要素内の要素を取得したい


[ドキュメント](https://www.crummy.com/software/BeautifulSoup/bs4/doc/#miscellaneous)に

> `AttributeError: 'ResultSet' object has no attribute 'foo'` \- This usually
> happens because you expected `find_all()` to return a single tag or string.
> But `find_all()` returns a _list_ of tags and strings–a ResultSet object.
> You need to iterate over the list and look at the .foo of each one. Or, if
> you really only want one result, you need to use `find()` instead of
> `find_all()`.

とある通りです．`find_all()`を使う場合，その結果はリストで得られるのでイテレーションをまわしてやればいいでしょう．例えば

[code]

    for hoge in soup.find_all('div', class_='hoge'):
        print(hoge.find_all('div', class_='piyo'))
    
[/code]


CC BY-SA 4.0
2020-02-05T06:22:34.010
62797
2020-02-05T06:22:34.010
2376
62793
answer