8

だから私はゆっくりとPythonを学び、オンラインゲームのハイスコアページからデータを引き出す簡単な関数を作ろうとしています。これは私が1つの関数に書き直した他の誰かのコードです(これは問題である可能性があります)が、このエラーが発生します。コードは次のとおりです。

>>> 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'

前もって感謝します。

4

1 に答える 1

19

わお。トリプティックは、関連する質問に素晴らしい答えを提供しました。

BeautifulSoupのソースコードから、ResultSetサブクラスがわかりますlist

あなたの例では、はBSのクラス get_rowsのインスタンスで あり、BSのサブクラスなので、 get_rowsはリストであることを意味します。ResultSet
ResultSetlist

get_rowsのインスタンスとして、メソッドは実装されてResultSetいません。findAllしたがって、あなたのエラー。
Triptychがこれまでとは異なる方法で行ったことは、そのリストを反復処理することです。 リスト内のアイテムはBSのTagクラスのインスタンスで
あるため、Triptychのメソッドは機能します。get_rowsメソッドがありfindAllます。

createしたがって、コードを修正するには、メソッドの最後の3行を次のように置き換えることができます。

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

レオナルドリチャードソンへのメモ:私は決してあなたの仕事の質をBSと呼ぶことによって侮辱するつもりはありません;-)

于 2009-06-14T06:17:16.113 に答える