6

私はbeautifulsoupを使用して、html文字列から画像とリンクを抽出しています。それはすべて完全に正常に機能しますが、リンクの内容にタグが含まれている一部のリンクではエラーが発生します。

リンクの例:

<a href="http://www.example.com"><strong>Link Text</strong></a>

Pythonコード:

soup = BeautifulSoup(contents)
links = soup.findAll('a')
for link in links:
    print link.contents # generates error
    print str(link.contents) # outputs [Link Text]

エラーメッセージ:

TypeError: sequence item 0: expected string, Tag found

リンクテキスト内の子タグをループする必要はありません。生のコンテンツを返したいだけです。これはBSで可能ですか?

4

1 に答える 1

15

タグのテキストコンテンツのみを取得するために、このelement.get_text()メソッドでは、タグを含む現在の要素からテキストを取得(削除)できます。

print link.get_text(' ', strip=True)

最初の引数は、すべてのテキスト要素を結合するために使用されます。座っstripているとTrueは、すべてのテキスト要素の先頭と末尾の空白が最初に削除されることを意味します。これにより、ほとんどの場合、きちんと処理されたテキストが得られます。

.stripped_stringsiterableを使用することもできます:

print u' '.join(link.stripped_strings)

これは基本的に同じ効果ですが、最初にストリップされた文字列を処理またはフィルタリングすることを選択できます。

内容を取得するには、各子アイテムでstr()またはを使用します。unicode()

print u''.join(unicode(item) for item in link)

Elementこれは、含まれているアイテムとアイテムの両方で機能しNavigableStringます。

于 2013-01-10T17:51:01.157 に答える