アイキャッチ画像

PythonのBeautifulSoup4でHTMLの要素を削除する

PythonのBeautifulSoup4モジュールを使って、HTMLドキュメントの特定の要素を削除してみます。

目次

  1. HTMLから要素を削除する方法
  2. decomposeメソッドの使用例
  3. extractメソッドでも削除できる
  4. extractメソッドの使用例

HTMLから要素を削除する方法

Beautiful Soup 4のdecomposeメソッドで要素を削除します。

要素の内容だけを削除する場合は、 clearメソッド を使用します。

soup.decompose()
変数 内容
soup 削除する要素。

明快です。

decomposeメソッドの使用例

こういうindex.htmlがあったとします。

<html>
    <head></head>
    <body>
        <h1 class="1st">最初の章</h1>
            <ul>
                <li id="foo">項目1</li>
                <li id="bar">項目2</li>
                <li id="bar">項目3</li>
            </ul>
        <h1 class="2nd">2つめの章</h1>
            <p>文章</p>
    </body>
</html>

このHTMLドキュメントから、UL要素とその子要素を削除します。

>>> from bs4 import BeautifulSoup
>>> with open('index.html', mode='rt', encoding='utf-8') as f:
...     soup = BeautifulSoup(f.read(), 'html.parser')
...

>>> soup.find('ul').decompose()

>>> soup # 削除後のドキュメント
<html>
<head></head>
<body>
<h1 class="1st">最初の章</h1>

<h1 class="2nd">2つめの章</h1>
<p>文章</p>
</body>
</html>

UL要素がその子要素を含めて削除されました。

extractメソッドでも削除できる

正しい使い方ではないのかもしれませんが、extractメソッドでも要素を削除できます。

soup.decompose()
変数 内容
soup 削除する要素。

extractメソッドの使用例

上記と同じHTMLドキュメントのUL要素を削除してみます。

>>> from bs4 import BeautifulSoup
>>> with open('index.html', mode='rt', encoding='utf-8') as f:
...     soup = BeautifulSoup(f.read(), 'html.parser')
...

>>> soup.find('ul').extract()
<ul>
<li id="foo">項目1</li>
<li id="bar">項目2</li>
<li id="bar">項目3</li>
</ul>

>>> soup # 削除後のドキュメント
<html>
<head></head>
<body>
<h1 class="1st">最初の章</h1>

<h1 class="2nd">2つめの章</h1>
<p>文章</p>
</body>
</html>

削除できましたね。

広告

PythonとXMLカテゴリの投稿