2016-10-07 11 views
1

iは、HTMLBeautifulSoup - テキスト

<div>Hey</div><div>This is <b>some text<b/>, right here. <a>Link<a/></div> 

とコード

soup = BeautifulSoup(html) 
texts = soup.findAll(text=True) 

プリントを(持っていると言うことができますよう、タグ付きテキストを抽出するには)テキストの

['Hey', 'This is ', 'some text', ', right here.', 'Link'] 

を返します。

は、どのように私は(テキストのみが含まれていることを)「B」のようなタグを除外することができたので、私は

['Hey', 'This is <b>some text<b/>, right here.', 'Link'] 

また、好ましくはない文字列同等のNavigableStringsまたは類似した所望の出力を得ることができます。

つまり、タグを除外してツリーをナビゲートするにはどうすればよいですか?

eDiv = soup.findAll("div") 
if eDiv.find("b") is None: 
    tag = eDiv.text 
else: 
    tag = eDiv 

今あなたがリストにこれを追加することができます:更新されたOPの質問に基づいて

+0

あなたはどういう意味ですか*「b」(テキストのみを含む)のようなタグを除外することはできますか?bと思われる他のタグは何ですか? –

+0

私のhtmlにはbのみが含まれていますが、 'i'とbrでも可能です。基本的にタグからすべてのテキストリソースを抽出する必要があります。ただし、他の兄弟タグからテキストを除いた親のテキストを抽出する 'b'以外は除きます。 –

+0

もっと複雑な例を追加して、出力として何を追加できますか? –

答えて

-1

+0

私の例では動作しますが、実際のhtmlでは別のアプローチが必要です。いくつかのdivには、別々にテキストを抽出する他の要素が含まれています。私のhtmlは大きく、私は手動で要素を選ぶことができません。テキストを含むタグの中には、h1、h2、p、li、aなど...とdivsがありますが、divの中には他の要素があります。 –

+0

あなたが興味を持っているdivの一意の識別子がなければなりません。次に、CSSセレクタ(soup.selectを使って)を使ってそれらを得ることができます。ここでhtmlの大きな塊を与えると、私はあなたのためのその一意の識別子を取得しようとする可能性があります。 他\tタグ= eDiv.text : \tタグ= eDiv'今あなたがリストにこれを追加することができ –

+0

'EDIV = soup.findAll( "DIV") eDiv.find( "B")の場合はNoneです。 –

関連する問題