beautifulsoupによるfind_allの利用方法について


スクレイピングにおいて値が" 3月調査 "であるspanタグを取得し，そのdata-
value1属性値を取得したいと考えています。find_all関数を用いて以下のコードを実行しました。

実行コード

[code]

    soup.find_all('span', text=" 3月調査 ")
    
[/code]

取得したいhtmlタグ

[code]

    <span data-key="tstat" data-key1="tclass1" data-key2="tclass2" data-matter="2" data-value="000001014549" data-value1="000001162554" data-value2="000001164846">
                                    3月調査
                         <span class="stat-pc">[57件]</span>
    </span>
    
[/code]

結果は[]でした。どうすればタグ内の値が"3月調査"であるspanタグを取得できるでしょうか？




タグ内の値に"3月調査"を含むspanタグを取得したい場合は`find_all`でタグを取得してから[`get_text()`](https://beautiful-
soup-4.readthedocs.io/en/latest/index.html#get-text)で対象を絞る方法があります。

**サンプルコード**

[code]

    from bs4 import BeautifulSoup
    import re
    
    html = """
    <html>
    <body>
    <span data-key="tstat" data-key1="tclass1" data-key2="tclass2" data-matter="2" data-value="000001014549" data-value1="000001162554" data-value2="000001164846">
                                    3月調査
                         <span class="stat-pc">[57件]</span>
    </span>
    </body>
    </html>
    """
    soup = BeautifulSoup(html, "html.parser")
    spans = [t for t in soup.find_all('span') if '3月調査' in t.get_text()]
    
    for t in spans:
        print(t.get_text(strip=True))
    
[/code]

なおご質問のコードではspanが入れ子になっているため、`get_text()`関数でテキストを取得すると`3月調査[57件]`のように入れ子のspanタグの中身も返ります。  
そのためサンプルコードの`if '3月調査' in t.get_text()`を`if t.get_text(strip=True) ==
'3月調査'`に書き換えるとヒットしなくなります。




タグ内の値に"3月調査"を含むspanタグを取得したい場合は`find_all`でタグを取得してから[`get_text()`](https://beautiful-
soup-4.readthedocs.io/en/latest/index.html#get-text)で対象を絞る方法があります。

**サンプルコード**

[code]

    from bs4 import BeautifulSoup
    import re
    
    html = """
    <html>
    <body>
    <span data-key="tstat" data-key1="tclass1" data-key2="tclass2" data-matter="2" data-value="000001014549" data-value1="000001162554" data-value2="000001164846">
                                    3月調査
                         <span class="stat-pc">[57件]</span>
    </span>
    </body>
    </html>
    """
    soup = BeautifulSoup(html, "html.parser")
    spans = [t for t in soup.find_all('span') if '3月調査' in t.get_text()]
    
    for t in spans:
        print(t.get_text(strip=True))
    
[/code]

なおご質問のコードではspanが入れ子になっているため、`get_text()`関数でテキストを取得すると`3月調査[57件]`のように入れ子のspanタグの中身も返ります。  
そのためサンプルコードの`if '3月調査' in t.get_text()`を`if t.get_text(strip=True) ==
'3月調査'`に書き換えるとヒットしなくなります。

