18
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

BeautifulSoupを利用して取得したデータの、下層の不要なタグを除去する方法

Last updated at Posted at 2018-02-12

#BeautifulSoupを利用して取得したデータの、下層の不要なタグを除去する方法

BeautifulSoupを利用して取得したデータが、不要なタグまみれだというケースは多々あるかと思います。
idやclassが指定されていれば除去は大変ではないのですが、特にid、classが指定されていないページも未だに多いです。

例えばこんな場合

text = '' \
       '<div id="title">' \
           '<span>株式会社パイソンホールディングス' \
               '<span>[東京都]' \
                   '<span>(港区)</span>' \
               '</span>' \
           '</span>' \
       '</div>'

企業名のみ取得したいところですが、spanタグが入れ子になっていてなかなか思うようにいきません。

from bs4 import BeautifulSoup

text = '' \
       '<div id="title">' \
           '<span>株式会社パイソンホールディングス' \
               '<span>[東京都]' \
                   '<span>(港区)</span>' \
               '</span>' \
           '</span>' \
       '</div>'

bsobj = BeautifulSoup(text, 'lxml')
company_name = bsobj.find('span')

print(company_name)
# <span>株式会社パイソンホールディングス<span>[東京都]<span>(港区)</span></span></span>

print(company_name.text)
# 株式会社パイソンホールディングス[東京都](港区)

.contentsを利用すると取得したタグと、下層のタグを切り分けてくれます。
ですので、.contents[0]を利用すれば、不要な下層タグを除去したデータを取得できます。

from bs4 import BeautifulSoup

text = '' \
       '<div id="title">' \
           '<span>株式会社パイソンホールディングス' \
               '<span>[東京都]' \
                   '<span>(港区)</span>' \
               '</span>' \
           '</span>' \
       '</div>'

bsobj = BeautifulSoup(text, 'lxml')
company_name = bsobj.find('span')

print(company_name.contents)
# ['株式会社パイソンホールディングス', <span>[東京都]<span>(港区)</span></span>]

print(company_name.contents[0])
# 株式会社パイソンホールディングス
18
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?