2009-06-14 10 views
8

私はPythonをゆっくり学び、オンラインゲームのハイスコアページからデータを引き出すシンプルな関数を作ろうとしています。これは私が1つの関数(問題の可能性があります)に書き換えた他の人のコードですが、このエラーが発生しています。コードは次のとおりです。なぜ「ResultSet」にPythonのBeautifulSoupを使用した属性「findAll」がありませんか?

>>> from urllib2 import urlopen 
>>> from BeautifulSoup import BeautifulSoup 
>>> def create(el): 
    source = urlopen(el).read() 
    soup = BeautifulSoup(source) 
    get_table = soup.find('table', {'id':'mini_player'}) 
    get_rows = get_table.findAll('tr') 
    text = ''.join(get_rows.findAll(text=True)) 
    data = text.strip() 
    return data 

>>> create('http://hiscore.runescape.com/hiscorepersonal.ws?user1=bigdrizzle13') 

Traceback (most recent call last): 
    File "<pyshell#18>", line 1, in <module> 
    create('http://hiscore.runescape.com/hiscorepersonal.ws?user1=bigdrizzle13') 
    File "<pyshell#17>", line 6, in create 
    text = ''.join(get_rows.findAll(text=True)) 
AttributeError: 'ResultSet' object has no attribute 'findAll' 

ありがとうございます。

+0

変数の名前を "first"、 "second"などと命名するのは恐ろしいスタイルです。具体的な名前はあなた次第ですが、 "urlcontent"、 "parser"、 "mp_tables"などを使用することもできます。 –

+0

私の3日目はPythonです。私はそれを私の頭の中でまっすぐに保つためにそれをする必要があります。それは時間が経つにつれて良くなるでしょう... – Alex

+0

私は変数名を変更しました。希望はそれより良い。 – Alex

答えて

19

うわー。 Triptychは関連する質問にgreat answerを提供しました。

from BeautifulSoup's source code,サブクラスlistがあります。あなたの例では

get_rowsは、
BSのResultSetクラスのインスタンスであり、get_rowsを意味BSのResultSetサブクラスlist、以来リストです。

get_rowsResultSetのインスタンスとして、を実施findAll方法を持っていありません。したがってあなたのエラー。
トリプティックがやり方を変えたのはです。そのリスト上でを繰り返します。
トリプティックの方法は、get_rowsリストの項目がBSのタグクラスのインスタンスであるため機能します。これはfindAllメソッドを持っています。あなたのコードを修正するので、

、あなたはこのような何かを使用してcreate方法の最後の3行置き換えることができます:レナード・リチャードソンに

for row in get_rows: 
    text = ''.join(row.findAll(text=True)) 
    data = text.strip() 
    print data 

注:決して私はの品質をおとしめるつもりか

+0

大声で感謝します:) – Triptych

+0

それを言及しないでください:素晴らしい仕事は認識に値する! – bernie

+0

'text = True'は私が探していたものでした! –

関連する問題