12

BeautifulSoup を使用して、HTML ページのコンテンツを解析しています。

必要なコンテンツ (つまり、 myclassでspan定義されたに含まれるテキスト) を html から抽出できます。class

result = mycontent.find(attrs={'class':'myclass'})

私はこの結果を得る:

<span class="myclass">Lorem ipsum<br/>dolor sit amet,<br/>consectetur...</span>

次を使用してテキストを抽出しようとすると:

result.get_text()

私は得る:

Lorem ipsumdolor sit amet,consectetur...

タグが削除されるとわかるように<br>、コンテンツ間にスペースがなくなり、2 つの単語が連結されます。

この問題を解決するにはどうすればよいですか?

4

3 に答える 3

23

bs4 を使用している場合は、次を使用できますstrings

" ".join(result.strings)
于 2013-04-20T13:53:11.773 に答える
16

'contents' を使用し、<br>?を置き換えます。

完全な (実際に動作し、テスト済みの) 例を次に示します。

from bs4 import BeautifulSoup
import urllib2

url="http://www.floris.us/SO/bstest.html"
page=urllib2.urlopen(url)
soup = BeautifulSoup(page.read())

result = soup.find(attrs={'class':'myclass'})
print "The result of soup.find:"
print result

print "\nresult.contents:"
print result.contents
print "\nresult.get_text():"
print result.get_text()
for r in result:
  if (r.string is None):
    r.string = ' '

print "\nAfter replacing all the 'None' with ' ':"
print result.get_text()

結果:

The result of soup.find:
<span class="myclass">Lorem ipsum<br/>dolor sit amet,<br/>consectetur...</span>

result.contents:
[u'Lorem ipsum', <br/>, u'dolor sit amet,', <br/>, u'consectetur...']

result.get_text():
Lorem ipsumdolor sit amet,consectetur...

After replacing all the 'None' with ' ':
Lorem ipsum dolor sit amet, consectetur...

これは、Sean の非常にコンパクトなソリューションよりも複雑です。しかし、私が示した線に沿ってソリューションを作成し、テストできるようになったらテストすると言っていたので、約束を守ることにしました。ここで何が起こっているかを少しよく見ることができます - はタプル<br/>内の独自の要素ですが、result.contents文字列に変換されると「何も残っていません」。

于 2013-04-20T13:47:27.423 に答える
4

result.get_text(separator=" ")動作するはずです。

于 2019-01-28T09:59:03.517 に答える