Attribute: ‚NoneType‘ Objekt hat kein Attribut ‚find_all‘ (Viele der anderen gestellten Fragen waren nicht anwendbar)

stimmen
-6

Ich habe dieser Fehler gesehen hier gefragt, auf ein paar Mal, aber die Lösungen wirklich waren mir nicht klar.

Ich beginne gerade mit BeautifulSoup, so diese Frage ein bisschen trivial sein kann.

Ich suche die zweite Tabelle auf der folgenden Website zu extrahieren:

http://www.espnfc.com/player/45843/lionel-messi?season=2015

Hier ist der Code, den ich so zu tun, bin mit:

page = urllib.urlopen('http://www.espnfc.com/player/45843/lionel-messi?season=2015').read()
soup = BeautifulSoup(page, lxml)

data = []

#find the tables on the webpage
tables = soup.find_all('table')

#extract the table we will be analyzing
store = tables[1]

#extract all of the rows
rows = store.find_all('tr')

for row in rows:

    entries = row.tbody.find_all('td')
    if entries[6].string is not None:
        data.append(entries[6])

Das Attribut Fehler ich erhalte wird darauf auf entries = row.tbody.find_all('td')

Jede Hilfe wäre sehr geschätzt.

Veröffentlicht am 11/09/2016 um 20:27
vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Es bedeutet , dass Sie versuchen, rufen Sie find_allüber den Wert None. Das könnte row.tbodyzum Beispiel, vielleicht , weil es keine <tbody>im eigentlichen HTML.

Beachten Sie, dass das <tbody>Element impliziert . Es wird in Ihrem Browser DOM - Inspektoren sichtbar sein, aber das bedeutet nicht , es in der HTML tatsächlich vorhanden ist für BeautifulSoup zu analysieren. Im Allgemeinen müssen Sie nicht brauchen , zu verweisen <tbody>überhaupt, es sei denn , es auch einen ist <thead>oder <tfooter>oder es gibt mehrere <tbody>Elemente vorhanden.

Suchen Sie einfach nach den <td>Zellen direkt:

rows = store.find_all('tr')

for row in rows:    
    entries = row.find_all('td')
    if len(entries) > 6 and entries[6].string is not None:
        data.append(entries[6])

Man könnte dies vereinfachen für einen mit der Frage , CSS - Selektor :

rows = soup.select('table:nth-of-type(2) tr')
data = [cell
        for row in rows
        for cell in row.select('td:nth-of-type(7)') if cell.string]
Beantwortet am 11/09/2016 um 20:42
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more