質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.38%
Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

201閲覧

BeautifulSoupのデータをhtmlタグで分割してリストにするには?

castlemist

総合スコア10

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2023/05/23 08:37

実現したいこと

スクレイピングしたデータを最終的に以下のようなリストとして出力したい
['こんにちは', 'こんばんは']

  • <br/>タグで分割してリストにする
  • <strong></strong>タグを削除する

前提

PythonとBeautifulSoupを使用しています。
変数htmlは変更しないものとします。

発生している問題

  1. <strong>タグを削除すると<br/>タグも同時に削除される
  2. <br/>タグが削除されることによってsplitを利用した分割が不可になる

該当のソースコード

Python3

1html = '<strong>こんにちは<br/>こんばんは</strong>' 2soup = BeautifulSoup(html, 'html.parser') 3items = soup.select('strong') 4 5print(items[0]) 6print(items[0].text) 7print(type(items[0])) 8 9result = items[0].split('<br/>') 10print(result)

試したこと

Python3

1# 文字列型にしてなんとかできないかと試みました 2str(items[0])

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

Python 3.10.6
beautifulsoup 4.12.2
Windows11

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2023/05/23 08:56

items[0].contents を利用してみてはどうでしょうか。 import bs4 result = [elm for elm in items[0].contents if not isinstance(elm, bs4.element.Tag)] print(result)
castlemist

2023/05/23 09:29

すごい! 浅学につき.contentsとisinstanceが理解できてないのは困ったものですが、動作を確認できました。
guest

回答1

0

自己解決

コメントをいただき解決できました。
ほぼコメントのままですが、コードは以下になりました。

Python3

1from bs4 import BeautifulSoup, element 2 3html = '<strong>こんにちは<br/>こんばんは</strong>' 4soup = BeautifulSoup(html, 'html.parser') 5items = soup.select('strong') 6 7print(items[0]) 8print(items[0].text) 9print(items[0].contents) 10print(type(items[0])) 11 12result = [elm for elm in items[0].contents if not isinstance(elm, element.Tag)] 13print(result)

投稿2023/05/24 09:13

castlemist

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.38%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問