2016-03-18 7 views
2
from bs4 import BeautifulSoup 
import urllib.request 
import win_unicode_console 
win_unicode_console.enable() 


link = ('https://pietroalbini.io/') 
req = urllib.request.Request(link, headers={'User-Agent': 'Mozilla/5.0'}) 
url = urllib.request.urlopen(req).read() 

soup = BeautifulSoup(url, "html.parser") 
body = soup.find_all('div', {"class":"wrapper"}) 

print(body.text) 

こんにちは美しいスープに問題があります。最後に ".text"を付けずにこのコードを実行すると、divのリストが表示されます私は最後に「.textセクション」追加のエラーBeautiful Soup 'ResultSet'オブジェクトに属性 'text'がありません

Traceback (most recent call last): File "script.py", line 15, in print(body.text) AttributeError: 'ResultSet' object has no attribute 'text'

+3

を '体内でのdivのために:プリント(div.text)'。 find_allは、あなたの条件に一致するbeautifulsoupが見つかった項目のリストを返します。エラーが示すように、結果のオブジェクトのセットには属性テキストはありませんが、結果セット内の項目は見つかるはずです。 – Pythonista

+0

@slayer、それは答えには不十分ですか? –

答えて

4

find_allあなたはforループを使用しての繰り返し処理できるResultSetオブジェクトを返してきます。あなたにできることは次のとおりです。

for wrapper in body.find_all('div', {"class":"wrapper"}): 
    print wrapper.text 
+0

実際に 'set'のサブクラスかもしれませんが、おそらく' list'( 'iterable'を意味するかもしれませんか?)である' ResultSet'オブジェクトを返します(エラーメッセージの中に直接あります)。 –

+0

答えを編集しました。訂正ありがとう:) – MrPyCharm

1

ほとんど逐語的コメントで述べたように

あなたのコードは次のようでなければなりませんので、おそらく..答えとして投稿している必要があります。

for div in body: 
    print div.text 
    #python3 
    #print(div.text) 

または一部の命名スキーマをあなたの好みに合わせてください。

find_allメソッドは、あなたの検索条件に合ったソースWebページhtmlを解析した後に、beautifulsoupが見つけたアイテムのリストを生成します(ここでは用語リストを大まかに使用)。

エラーが示すように、結果のオブジェクトセットには属性テキストがありません。これは要素ではなく、それらのコレクションです。 しかし、結果セット内の項目(見つかるはずのもの)はあります。あなたが入力するよ場合

あなたはドキュメントhere

2

を表示することができます。

print(type(body)) 

あなたはbodyそれはすべてクラスに一致する要素を意味<class 'bs4.element.ResultSet'>で表示されます。

for div in body: 
    print(div.text) 

それとも、あなただけのdivを持って知っていれば、あなたの代わりにfindを使用することができます:あなたはそれらを反復するか

div = soup.find('div', {"class":"wrapper"}) 
div.text 
関連する問題