85378


BS4初心者、というかWebスクレイピング初心者です。  
スクレイピング対象のサイトの作りが表データと表を説明するデータで構成されており、Pandasを使い表データ取得や加工等はできるようになったのですが、表以外のデータの取得も必要となりBeautifulSoup4を併用することで考えています。  
取得する必要があるのは動的に変更となるclass名自体になります。  
reなどでワイルドカードを利用したclass名指定による値取出しはできるのですが、今回の場合、class名自体を取得したいのです。

サイトの例示は以下のようになります。

[code]

        <div class="Kategorie science"> ←"Kategorie science"の部分が動的に変る
    <h2 class="TitleName">XXXの本</h2>
    <span class="TitleDetail Level-1">XXXXXX</span>
    <div class="TitleLabels">
        <span class="label Level-1">XXXXXXX</span>
    </div>
    
[/code]

このようなサイトデータから"Kategorie science"（実際には都度動的に変更となります）を取得したいのです。

アドバイスを頂けると幸甚です。


CC BY-SA 4.0
2021-12-26T15:15:38.260
85342
2021-12-28T11:46:06.973
2021-12-26T15:25:28.687
50659
50659
question
python pandas beautifulsoup
Beautiful Soup4で動的なクラス名自体を取得するには？

[code]

    >>> from bs4 import BeautifulSoup
    >>> s = BeautifulSoup('''<div class="Kategorie science"> ←"Kategorie science"の部分が動的に変る
    ... <h2 class="TitleName">XXXの本</h2>
    ... <span class="TitleDetail Level-1">XXXXXX</span>
    ... <div class="TitleLabels">
    ...     <span class="label Level-1">XXXXXXX</span>
    ... </div>''', 'lxml')
    
    >>> classes = [d['class'] for d in s.findAll('div')]
    >>> classes
    [['Kategorie', 'science'], ['TitleLabels']]
    
[/code]

とか


CC BY-SA 4.0
2021-12-27T01:05:24.217
85346
2021-12-27T01:05:24.217
12274
85342
answer


(回答付いてるけど, 少し異なるような？記述として)

[code]

    >>> from bs4 import BeautifulSoup
    >>> page = '''
    ...     <div class="Kategorie science"> ←"Kategorie science"の部分が動的に変る
    ... <h2 class="TitleName">XXXの本</h2>
    ... <span class="TitleDetail Level-1">XXXXXX</span>
    ... <div class="TitleLabels">
    ...     <span class="label Level-1">XXXXXXX</span>
    ... </div>
    ... '''
    >>> soup = BeautifulSoup(page)
    
[/code]

最初に見つかる divの class

[code]

    >>> soup.div['class']
    ['Kategorie', 'science']
    
[/code]

すべての divの class属性を持つもの (から属性のみ表示)

[code]

    >>> soup('div', class_=lambda v: print(v))
    Kategorie
    science
    Kategorie science
    TitleLabels
    TitleLabels
    []
    
[/code]


CC BY-SA 4.0
2021-12-28T11:46:06.973
85378
2021-12-28T11:46:06.973
43025
85342
answer