2016-08-04 4 views
0

ウェブサイトのデータを掻き集めていて、BeautifulSoupbs4)を使用して問題が発生しました。私はいくつかの要素のテキストを取得する必要があります、何か(カンマ、スペースなど)で区切られて、テキストが現れる順序で分割することができます。 bs4.element.Tagテキスト<br>の後にbrタグを置き換えた後に消えます

text属性は、テキストコンテンツを提供します。問題は、私は、間に<br>があっても、テキストが連結取得しています、です。私はOneTwoは一つの単語/文章や複数であるかを区別する方法がありません。

私はfind_allを使用して、すべての<br>タグを見つけて、カンマ,に置き換えて、テキストを分割することができます。しかし、brタグを交換するとbrタグを次のテキストを削除しているようです。私はそれを印刷することOne,TwoまたはOne,Two,,または代わりに何か似ている

from bs4 import BeautifulSoup 

soup = BeautifulSoup(""" 
<html> 
    <head> 
    </head> 
    <body> 
     <div> 
      One 
      <br> 
      Two 
      <br> 
      <br> 
     </div> 
    </body> 
</html> 
""".replace(' ', '').replace('\n', ''), "html.parser") 

print soup.div.text 
# Out: OneTwo 

for br in soup.find_all('br'): 
    br.replace_with(',') 

print soup.text.replace('\n', '') 
# Out: One, 

:ここ

は、問題を再現するいくつかのコードです。どのように私は、プロセス内の他のテキストを削除せずに、文字とbrタグを置き換えることができますか?

+0

あなたは '' –

+0

述べたように、これはまだ個々の単語を分離しない '' divText = [単語があればsoup.div.split内の単語のための単語( '
を')]試すことができます。私は1つが単一の単語であるかどうかわかりません。 –

+0

編集して、もう一度ご覧ください。 –

答えて

0

これを行う方法はたくさんありますが、現実世界、おそらく恐ろしいhtmlでうまくいく、きれいなソリューションが欲しかったです。

誰かが同様の問題の解決策を探しに来たら、私はちょうど私が探していたちょっとした方法、insertを見つけました。

from bs4 import BeautifulSoup 

soup = BeautifulSoup(""" 
<html> 
    <head> 
    </head> 
    <body> 
     <div> 
      One 
      <br> 
      Two 
      <br> 
      <br> 
     </div> 
    </body> 
</html> 
""".replace(' ', '').replace('\n', ''), "html.parser") 

for br in soup.find_all('br'): 
    br.insert(0, ',') 

print soup.text.replace('\n', '') 
# Out: One,Two,, 

編集

パドレイクカニンガムが示唆されたとしても、より良い解決策は、単に元のテキストを保持します交換にbrのテキストを連結することです。

from bs4 import BeautifulSoup 

soup = BeautifulSoup(""" 
<html> 
    <head> 
    </head> 
    <body> 
     <div> 
      One 
      <br> 
      Two 
      <br> 
      <br> 
     </div> 
    </body> 
</html> 
""".replace(' ', '').replace('\n', ''), "html.parser") 

for br in soup.find_all('br'): 
    br.replace_with(',' + br.text) 

print soup.text.replace('\n', '') 
# Out: One,Two 
+1

'br.replace_with( "" + br.text)' –

+0

ああ、素敵。答えとして投稿し、私はそれを受け入れます。決して 'br.text'が実際のテキストを含むとは考えていませんでした.. –

+0

答えはあなたが望むならあなた自身の答えに編集できます。 –

関連する問題