PythonのBeautifulSoup4でHTMLの要素を新しい要素で囲う
PythonのBeautifulSoup4モジュールを使って、HTMLドキュメントの要素を別の要素で囲ってみました。
目次
要素に親要素を追加する方法
Beautiful Soup 4のwrapメソッドで親要素を追加します。
ret = soup.wrap(soup.new_tag(name, [attr]))
変数 |
内容 |
---|---|
ret |
囲った部分のタグ要素。 |
soup |
HTMLドキュメントのオブジェクト。 |
name |
囲う要素の名前。 |
attr |
省略可。囲う要素の属性 |
囲うからラップですね。引数にはbs4.element.Tagクラスのオブジェクトを指定します。
wrapメソッドの使用例
こういう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要素をDIV要素で囲ってみます。
>>> from bs4 import BeautifulSoup
>>> with open('index.html', mode='rt', encoding='utf-8') as f:
... soup = BeautifulSoup(f.read(), 'html.parser')
...
>>> wrapped_tag = soup.find('ul').wrap(soup.new_tag('div', class_='hoge'))
>>> wrapped_tag # 囲った結果の表示
<div class_="hoge"><ul>
<li id="foo">項目1</li>
<li id="bar">項目2</li>
<li id="bar">項目3</li>
</ul></div>
>>> soup # HTMLドキュメント全体の表示
<html>
<head></head>
<body>
<h1 class="1st">最初の章</h1>
<div class_="hoge"><ul>
<li id="foo">項目1</li>
<li id="bar">項目2</li>
<li id="bar">項目3</li>
</ul></div>
<h1 class="2nd">2つめの章</h1>
<p>文章</p>
</body>
</html>
UL要素がdiv要素で囲われました。
囲われたのですが、属性が変です。classにしたいところがclass_になっていしまいました。
class='hoge'とアンダーバー無しで指定すると、実行時にシンタックスエラーになってしまいます。
これはちょっと困りますねえ。
公開日
広告
PythonとXMLカテゴリの投稿
- PythonでHTMLから特定のタグを抜き出してCSVにする
- PythonでHTMLを加工する
- PythonでXMLと文字列の変換
- PythonでXMLの構造を表示してみた
- PythonでXMLの読み込みと書き出し
- PythonのBeautifulSoup4でHTMLに要素を追加する
- PythonのBeautifulSoup4でHTMLの要素の内容にアクセスする
- PythonのBeautifulSoup4でHTMLの要素の内容を削除する
- PythonのBeautifulSoup4でHTMLの要素の囲いを外す
- PythonのBeautifulSoup4でHTMLの要素を削除する
- PythonのBeautifulSoup4でHTMLの要素を抜き出す
- PythonのBeautifulSoup4でHTMLの要素を新しい要素で囲う
- PythonのBeautifulSoup4でHTMLの要素を検索する
- Pythonのxmlで要素を列挙する
- PythonのxmlモジュールのElementTreeのルート要素を取得する
- PythonのxmlモジュールのElementからElementTreeを作る