Seite 1 von 1

'NoneType' object has no attribute 'attrs'

Verfasst: Dienstag 28. April 2020, 13:29
von Tron0070
Hallo Leute, ich bin neu im Forum und habe gerade erst mit Python begonnen.
Für eine Übung wollt ich mal alle Titel und Bilder URLs ausgeben lassen.

Leider komme ich nicht weiter, da ein Fehler ausgegeben wird wenn ein Titel kein Bild hat.
'NoneType' object has no attribute 'attrs'
Ich habe schon google bemüht. Aber ich konnte mit den Ergebnissen nichts anfangen, da ich mich noch nicht so gut auskenne um zu verstehen wie das umgesetzt wird.
Kann mir einer von euch bitte dabei helfen das es funktioniert?

Gruß Tron

Code: Alles auswählen

import requests
from bs4 import BeautifulSoup
r = requests.get("https://www.themoviedb.org/search?query=pulp%20fiction&language=de-DE")
doc = BeautifulSoup(r.text, "html.parser")


for card in doc.select(".card"):
    titel = (card.select_one(".title h2").text)
    
    image  = (card.select_one(".image .poster .result img").attrs["data-srcset"].split(","))
    image1 = (image[0].replace("1x", "").replace(" ", ""))
    image2 = (image[1].replace("2x", "").replace(" ", ""))
    
    print (titel)
    print (image1)
    print (image2)
    
    
    #break

Ausgabe:

Code: Alles auswählen

Pulp Fiction
https://image.tmdb.org/t/p/w94_and_h141_bestv2/hOg9USqmQmglmr5kGvpyg1XkhqN.jpg
https://image.tmdb.org/t/p/w188_and_h282_bestv2/hOg9USqmQmglmr5kGvpyg1XkhqN.jpg

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-1-7fc827b0dfe2> in <module>
      8     titel = (card.select_one(".title h2").text)
      9 
---> 10     image  = (card.select_one(".image .poster .result img").attrs["data-srcset"].split(","))
     11     image1 = (image[0].replace("1x", "").replace(" ", ""))
     12     image2 = (image[1].replace("2x", "").replace(" ", ""))

AttributeError: 'NoneType' object has no attribute 'attrs'




Re: 'NoneType' object has no attribute 'attrs'

Verfasst: Dienstag 28. April 2020, 13:58
von __deets__
Die Klammern um deine Ausdruecke sind ueberfluessig und verwirren nur.

Wenn card.select_one kein Ergebnis erhaelt, ist der Rueckgabewert None. Du musst also erstmal das Ergebnis des select_one an eine Variable binden, und die auf None testen. Nur wenn sie das nicht ist, kann es weiter gehen:

Code: Alles auswählen

thingamabob = card.select_one(".image .poster .result img")
if thingamabob is not None:
     ...

Re: 'NoneType' object has no attribute 'attrs'

Verfasst: Dienstag 28. April 2020, 14:49
von Tron0070
Hallo __deets__, vielen Dank für Deine Hilfe.
Es funktioniert.

Code: Alles auswählen

for card in doc.select(".card"):
    titel = card.select_one(".title h2").text
    
    image  = card.select_one(".image .poster .result img")
    if image is not None:
        image  = card.select_one(".image .poster .result img").attrs["data-srcset"].split(",")
        image1 = image[0].replace("1x", "").replace(" ", "")
        image2 = image[1].replace("2x", "").replace(" ", "")
    else:
        image1 = "kein Bild"
        image2 = ""

    print (titel)
    print (image1)
    print (image2)

    #break

Re: 'NoneType' object has no attribute 'attrs'

Verfasst: Freitag 8. Mai 2020, 05:05
von Tron0070
Hallo __blackjack__ , danke für Deinen Beitrag.

Ich will soweit wie es geht erst mal versuchen meinen eigenen Weg zu gehen, auch wenn es erst mal der Falsche ist. Wenn was im Code nicht funktioniert und ich lange Zeit dafür brauche das zu fixen, verkleiner ich den code etwas und probiere es weiter. Wenn es dann immer noch nicht läuft wird der code weiter verkleinert, sodass ich nur noch den kleinsten Teil vor mir habe. Das war der Code den ich gepostet hatte. Die Klassen- und Methodenbezeichnung war nur exemplarisch um einen besseren Überblick zu haben.

... Da es mir bis jetzt nicht gelungen ist meine Idee umzusetzen und ich vermute das mein Weg doch der falsche Weg sein könnte, werde ich wohl bald mal meinen richtigen Code Posten und hoffe auf Eure Hilfe.
Aber bis dahin will ich es erst mal noch selbst probieren.

Vielen Dank

Gruß Tron

Re: 'NoneType' object has no attribute 'attrs'

Verfasst: Freitag 8. Mai 2020, 05:57
von kbr
Tron0070 hat geschrieben: Freitag 8. Mai 2020, 05:05 Wenn was im Code nicht funktioniert und ich lange Zeit dafür brauche das zu fixen, verkleiner ich den code etwas und probiere es weiter. Wenn es dann immer noch nicht läuft wird der code weiter verkleinert, sodass ich nur noch den kleinsten Teil vor mir habe.
Mit der Erkenntnis bist Du auf einem guten Weg: Richtig ist es, klein anzufangen und testen, ob es läuft. Dann das Programm schrittweise wachsen zu lassen und nicht erst alles runterzuschreiben, um anschließend die Fehler zu suchen.

Re: 'NoneType' object has no attribute 'attrs'

Verfasst: Freitag 8. Mai 2020, 07:23
von Tron0070
Oh. Das sollte eigentlich in den Post "String in einer Funktion1 an die nächste Funktion2 weitergeben" rein.
Ich werde es dort noch mal posten.

Sorry.