1
0

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 3 years have passed since last update.

BeautifulSoupで最上層/最下層のタグを選択的に抽出する方法(暫定)

Last updated at Posted at 2021-08-23

概要

  • divのみで情報が収納されているhtml(一部分)からtextを抽出したい
  • div群の深さ・並列数など構造が可変であり位置指定は難しい
    • かろうじて「最上層のdivは大項目」「最下層のdivは個別要素」というルールは信頼できそう
    • 最上層divの内部にいくつの最下層divがあるかはまちまち
    • 各最下層divのdiv深さは3だったり4だったりまちまち
    • このクソ構造を作ったのは誰だァ!
  • Beautifulsoupで最上層divおよび可変深さの最下層divを抽出する方法のメモ

詳細

最上層div

  • soup.find_all('div', recursive=False) で最上層のdivのみ抽出できるらしいが、私の環境では機能しなかった
  • htmlの一部分からsoupを作成する際にはbodyタグが全体を囲うように付与される
  • divtops = soup.select('body>div') でbodyタグ直下のdiv(必然的に最上層)のみを抽出できた

最下層div

  • 最上層divをdivtopとする
  • divdiv = divtop.find_all('div') でdivtop内の全てのdivタグを拾ってくる
  • divbtms = list(filter(lambda x: len(x.find_all('div')) == 0, divdiv)) で、その下に更にdivタグを持たないdivタグ=最下層のdivタグを抽出

その他

  • divtopsはtype:class bs4.element.ResultSet(要素はtype: class 'bs4.element.Tag')
  • divbtmsはtypeがlistになってしまっている(要素はtype: class 'bs4.element.Tag')
  • typeが変更になってしまうのはモヤモヤする、もっとスマートな方法が絶対にある気がする……

参考

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?