BeautifulSoup4でコメントの取得と追加をする方法

2019年12月17日

みなさまおはこんばんにちは、せなです

今回はBeautifulSoup4でBeautifulSoupオブジェクト内のコメントを取得する方法と追加する方法を説明したいと思います

構成

以下の構成を前提に説明していきたいと思います

from bs4 import BeautifulSoup
from bs4 import Comment
html = """<html><title>せなブログ</title>
<!-- Title Name -->
<p class="sub title">疑問に思ったことをサクッと解説!一日一記事22時更新です</p>
<!-- Sub Title Name -->
</html>
"""
soup = BeautifulSoup(html, 'html.parser')

コメントの取得

BeatuifulSoupオブジェクトからコメントのみを取得するには以下の方法が使用できます

for comment in soup.find_all()[0].contents:
    if type(comment) is Comment:
        print(comment)
# Title Name 
# Sub Title Name 

find_all()メソッドでBeautifulSoupオブジェクトを取得して、if文でCommentオブジェクトを判定しています

BeautifulSoupには簡単にコメントを取得できるメソッドが(私が知る限りは)無いので上記の方法を使うと簡単に取得できます
コメントを再利用したいときにはnew_string()メソッドなどを使えば再利用もできますからね

コメントの追加

Beautiful Soup 4は容易にタグや文字列を追加することができます
まず、コメントを追加する場合にはnew_string()メソッドでコメントを生成する必要があります

以下のコードをご覧ください

new_comment = soup.new_string('New Comment!', Comment)
soup.p.append(new_comment)
print(soup)
#<html><title>せなブログ</title>
#<!-- Title Name -->
#<p class="sub title">疑問に思ったことをサクッと解説!一日一記事22時更新です<!--New Comment!--></p>
#<!-- Sub Title Name -->
#</html>

new_string()メソッドでコメントを生成するときにはnew_string('コメント', Comment)のようにします
また、append()メソッドでコメントを追加するとタグ内に追加されてしまいます

タグの前後に追加したい時にはinsert_before()insert_after()メソッドを使用しましょう

最後に

Beautiful Soup 4でのオブジェクトへのコメントの追加と取得について説明させていただきました

今回紹介していたメソッドのnew_string()insert_before()は以下の記事でより詳しく説明していますので、良ければ読んでみてください

リンク:BeautifulSoup4の要素の追加・置換・削除の使い方

ここまで読んで下さり、ありがとうございました
ではでは~