Why it doesn't work?

作業のメモ、記録をブログに残しています。

Python BeautifulSoup 不要なタグを削除

最近は、BeautifulSoupを使用してWEBサイトの更新情報を取得しています。
RSSをサポートしていないサイトが結構あるので自前で作成してみることにしました。
関連記事
Python BeautifulSoup4でパーサーとしてlxmlを指定するとエラーが発生する - Why it doesn't work?
不要なタグを削除する場合には、decompose()を使用します。

marks  = '<p><span class="category">Information</span><span class="bdy"><a href="https://www.sample.com/">Now <br>available!</a></span></p>'
soup = BeautifulSoup(marks, 'lxml')
a_tag = soup.a
print(a_tag)

これを実行すると

<a href="https://www.sample.com/">Now <br/>available!</a>

brタグを削除するには以下のようにします。

marks  = '<p><span class="category">Information</span><span class="bdy"><a href="https://www.sample.com/">Now <br>available!</a></span></p>'
soup = BeautifulSoup(marks, 'lxml')
a_tag = soup.a
print(a_tag)
soup.br.decompose()
print(a_tag)

これを実行すると

<a href="https://www.sample.com/">Now <br/>available!</a>
<a href="https://www.sample.com/">Now available!</a>

brタグが消えました。

ただし、以下のように該当タグが存在しない場合には。。。

marks  = '<p><span class="category">Information</span><span class="bdy"><a href="https://www.sample.com/">Now available!</a></span></p>'
soup = BeautifulSoup(marks, 'lxml')
soup.br.decompose()
print(a_tag)

以下のようなエラーが発生します。

AttributeError: 'NoneType' object has no attribute 'decompose'

find()でタグが存在するかをチェックしてから呼び出すのが無難です。