スクレイピングで子を一つだけ取り除く方法。


**.py**

[code]

    from bs4 import BeautifulSoup
    # urlは例です
    url = 'https://example.com'
    
    response = requests.get(url)
    data = response.text
    soup = BeautifulSoup(data, 'html.parser')
    
[/code]

**HTML**

[code]

    <div class='ttt'>
      <div class='red'></div>
      <div class='green'></div>
      <div class='blue'></div>
    </div>
    
[/code]

このようなHTMLからグリーン以外を取り出したいのですが、

[code]

    soup.find('div', {'class':'ttt'}).children
    
[/code]

を使ったらすべて取り出されてしまいます。  
このクラスの順番は毎回変わるので位置の指定はつかえないです。




[decompose](https://www.crummy.com/software/BeautifulSoup/bs4/doc/#decompose)で不要な項目を削除してから取り出す方法はいかがでしょうか。

サンプルコード

[code]

    from bs4 import BeautifulSoup
    
    data = """
    <html>
    <body>
      <div class='ttt'>
        <div class='red'></div>
        <div class='green'></div>
        <div class='blue'></div>
      </div>
    </body>
    </html>
    """
    soup = BeautifulSoup(data, 'html.parser')
    soup.find('div', {'class':'green'}).decompose() # 項目削除
    for c in soup.find('div', {'class':'ttt'}).children:
       c
    
[/code]

実行結果

[code]

    '\n'
    <div class="red"></div>
    '\n'
    '\n'
    <div class="blue"></div>
    '\n'
    
[/code]




[decompose](https://www.crummy.com/software/BeautifulSoup/bs4/doc/#decompose)で不要な項目を削除してから取り出す方法はいかがでしょうか。

サンプルコード

[code]

    from bs4 import BeautifulSoup
    
    data = """
    <html>
    <body>
      <div class='ttt'>
        <div class='red'></div>
        <div class='green'></div>
        <div class='blue'></div>
      </div>
    </body>
    </html>
    """
    soup = BeautifulSoup(data, 'html.parser')
    soup.find('div', {'class':'green'}).decompose() # 項目削除
    for c in soup.find('div', {'class':'ttt'}).children:
       c
    
[/code]

実行結果

[code]

    '\n'
    <div class="red"></div>
    '\n'
    '\n'
    <div class="blue"></div>
    '\n'
    
[/code]

