アイキャッチ画像

PythonのBeautifulSoup4でHTMLの要素の囲いを外す

PythonのBeautifulSoup4モジュールを使って、HTMLドキュメントの要素の囲いを外してみます。

目次

  1. 親要素を削除する手順
  2. unwrapメソッドの使用例

親要素を削除する手順

Beautiful Soup 4のunwrapメソッドを使って親要素を削除します。

ret = soup.unwrap()
変数 内容
ret 外したタグ要素。
soup BeautifulSoupクラスのオブジェクトの外したい要素。

アンラップで外します。

unwrapメソッドの使用例

こういう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')
...

>>> ret = soup.find('ul').unwrap()

>>> ret # 外した要素の表示
<ul></ul>

>>> soup # 外されたドキュメント全体の表示
<html>
<head></head>
<body>
<h1 class="1st">最初の章</h1>

<li id="foo">項目1</li>
<li id="bar">項目2</li>
<li id="bar">項目3</li>

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

ドキュメントからULが無くなりました。

ulを外してしまうとHTMLとしては成り立ちませんが、divを外したいということはあるのではないでしょうか。

広告

PythonとXMLカテゴリの投稿