2016-07-18 6 views
1

Ich versuche, einen Code zu schreiben, der Finanzdaten aus dem Internet kratzen und dann als Tabelle in der Tabelle darstellen wird. Das Problem, das ich habe ist, dass ich einen Fehler kommen immer wieder, die Attribute sagt-: ‚ResultSet‘ Objekt hat kein Attribut ‚findAll‘ Ich habe keine Ahnung, warum es diese immer wieder zurückkehrte, habe ich viele Dinge ausprobiert, der Fehler loszuwerden, aber es kommt einfach immer wieder. Ich hatte gehofft, dass einige hier etwas Licht in die Situation bringen könnten. Mein Code ist wie folgt:AttributeError: 'Resultset' Objekt hat kein Attribut 'findAll

import urllib2 

    from bs4 import BeautifulSoup 

    Goog_page = 'https://uk.finance.yahoo.com/q/hp?s=GOOG' 

    page = urllib2.urlopen(Goog_page) 

    html = page.read() 

    soup = BeautifulSoup(html, "lxml") 

    soup.prettify().encode('UTF-8') 

    #print soup.findAll('table') 

    right_table = soup.find_all('table', {'class':'yfnc_datamodoutline1'}) 




    A=[] 
    B=[] 
    C=[] 
    D=[] 
    E=[] 
    F=[] 
    G=[] 
    H=[] 
    I=[] 
    J=[] 

    def parse_string(el): 
     text = ''.join(el.findAll(text=True)) 
     return text.strip() 
    for rows in right_table: 
     rows = map(parse_string, right_table.findAll('tr')) 
     for cell in rows: 
      data = map(parse_string, rows.findAll('td')) 
      if len(data)>1: 
        A.append(data[0].find(text=True)) 
        B.append(data[1].find(text=True)) 
        C.append(data[2].find(text=True)) 
        D.append(data[3].find(text=True)) 
        E.append(data[4].find(text=True)) 
        F.append(data[5].find(text=True)) 
        G.append(data[6].find(text=True)) 
        H.append(data[7].find(text=True)) 
        I.append(data[8].find(text=True)) 
        J.append(data[9].find(text=True)) 

Der Fehler ich zurück ist: Die Datei "...", Zeile 37, in rows = right_table.findAll ('tr') und dann die Fehlermeldung gedruckt wird.

Ich verwende Python 2.7 und Windows 8.1

Vielen Dank im Voraus für die Hilfe!

+0

Mögliche Duplikat [Schöne Suppe: ‚ResultSet‘ Objekt hat kein Attribut ‚gefunden \ _all '?] (http://stackoverflow.com/questions/24108507/beautiful-soup-resultset-object-has-no-attribute-find-all) –

+0

Ok cool, danke. Ich werde das überprüfen! –

Antwort

0

In diesem Abschnitt des Codes:

data = map(parse_string, rows.findAll('td')) 
if len(data)>1: 

entweder Sie benötigen eine for Schleife verwenden, um Ihr data Objekt zu durchqueren über oder rows.find('td') statt findAll verwenden, wenn Sie nur ein td Element haben.

Zum Beispiel, wenn Sie den Text für jeden <td> und fügen Sie ihn in einer Liste, die Sie konnte erhalten möchten:

data = [] 
for row in right_table: 
    tablecells = row.findAll('td') 
    for cell in tablecells: 
     data.append(row.get_text().strip()) 
+0

Ja das macht Sinn. Ich dachte, dass das Problem vielleicht darin besteht, dass ich versuche, den zweiten findAll-Befehl zu verwenden, um über eine Liste zu suchen ... Gibt es überhaupt einen Punkt, an dem alle 'td'-Einträge in einer Liste angezeigt werden? –

+0

Ich habe ein Snippet hinzugefügt, das die Zellen an eine Liste anhängen soll – jinksPadlock