Frage

Ich lerne also langsam Python und versuche, eine einfache Funktion zu erstellen, die Daten aus der Seite mit hohen Ergebnissen eines Online -Spiels zeichnet. Dies ist der Code eines anderen, den ich in eine Funktion umgewandelt habe (was das Problem sein könnte), aber ich erhalte diesen Fehler. Hier ist der Code:

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

Danke im Voraus.

War es hilfreich?

Lösung

Wow. Triptychon lieferte a Großartig Antworten zu einer verwandten Frage.

Wir sehen, aus dem Quellcode von BeautifulSoup, das ResultSet Unterklassen list.

In Ihrem Beispiel, get_rows ist eine Instanz von BSs ResultSet Klasse,
und seit BS's ResultSet Unterklassen list, das bedeutet get_rows ist eine Liste.

get_rows, als Instanz von ResultSet, tut nicht haben eine findAll Methode implementiert; Daher Ihr Fehler.
Was Triptychon anders getan hat, ist iterieren über diese Liste.
Die Methode von Triptychon funktioniert, weil die Elemente in der get_rows Liste sind Fälle von BS 'Tag -Klasse; was hat a findAll Methode.

Um Ihren Code zu beheben, können Sie die letzten drei Zeilen Ihrer ersetzen create Methode mit so etwas:

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

Hinweis an Leonard Richardson: In keiner Weise beabsichtige ich, die Qualität Ihrer Arbeit zu erniedrigen, indem ich sie als BS bezeichne ;-)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top