Frage zu BeautifulSoup

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Rednaxelarekced
User
Beiträge: 17
Registriert: Mittwoch 6. März 2019, 22:04

Hallo zusammen,

mal wieder eine Frage. Ich hab jetzt einige Tutorials durchgearbeitet und auch versucht die doc zu lesen aber ich habe wohl ein Verständnisproblem



Wenn ich folgenden Code ausgeben lasse wird mir vom Soup.Object der Text der gesamten Webseite ausgegeben.

Code: Alles auswählen


from bs4 import BeautifulSoup
import requests

# url abspeichern   https://edition.cnn.com/markets/fear-and-greed
# soup objekt anlegen
# div class "market-tabbed-container"
# span class --- text ausgeben lassen

url = 'https://edition.cnn.com/markets/fear-and-greed'
soup = requests.get(url)

fear_site = BeautifulSoup(soup.content, 'html.parser')



print(fear_site.text)

Wenn ich jetzt weiter runter gehen will in der Baumstruktur

Code: Alles auswählen


from bs4 import BeautifulSoup
import requests

# url abspeichern   https://edition.cnn.com/markets/fear-and-greed
# soup objekt anlegen
# div class "market-tabbed-container"
# span class --- text ausgeben lassen

url = 'https://edition.cnn.com/markets/fear-and-greed'
soup = requests.get(url)

fear_site = BeautifulSoup(soup.content, 'html.parser')

## Hier soll nun tiefer im Baum gesucht werden
fear_index = fear_site.find('span', {'class': 'market-fng-gauge__dial-number'})

print(fear_index.text)

Wenn ich den Code ausführe bekomme ich dann mal wieder die Fehlermeldung

Code: Alles auswählen

 print(fear_index.text)
AttributeError: 'NoneType' object has no attribute 'text'

ich verstehe einfach nicht obwohl ich doch im ersten Beispiel die text Methode aufrufen kann auf das Objekt

ich dann eine Zuweisung mache, warum er dann nicht mehr auf das Objekt referenziert ? und ich den Text weiter unten nicht ausgeben lassen kann.

Vielleicht hat ja jemand ein gutes Buch oder eine gute Webseite, damit ich es verstehe. Bis jetzt was ich mache Hauptsächlich abtippen und dann versuchen es für mich nachzuvollziehen.


vielen dank nochmals an dieser Stelle
Benutzeravatar
Dennis89
User
Beiträge: 1526
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

'BeautifulSoup(soup.content, 'html.parser')' und 'BeautifulSoup(soup.content, 'html.parser').fear_site.find('span', {'class': 'market-fng-gauge__dial-number'})' sind nicht die selben Objekte.

https://www.crummy.com/software/Beautif ... /doc/#find

Was passiert wenn du

Code: Alles auswählen

print(fear_index)
schreibst?

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Rednaxelarekced
User
Beiträge: 17
Registriert: Mittwoch 6. März 2019, 22:04

Hallo Dennis,

vielen Dank schonmal für die Antwort!

wenn ich

print(fear_index)


schreibe, dann erhalte ich als Rückgabe None

was mir eigentlich sagt das da kein Objekt ist.
was ich aber nicht verstehen denn wenn ich ja sage

a = b
und b ausgeben lassen würde, dann hätte b ja den wert von a
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Rednaxelarekced hat geschrieben: Mittwoch 6. Juli 2022, 11:24 denn wenn ich ja sage
a = b
und b ausgeben lassen würde, dann hätte b ja den wert von a
Du sagst aber nicht a = b. Du verwendest fear_index = fear_site.find('span', {'class': 'market-fng-gauge__dial-number'}).

Wenn ich die Webseite abrufe, dann finde ich dort keine CSS-Klasse mit passendem Namen. Eventuell wird die via Javascript nachgeladen, aber dafür ist requests nicht zuständig. Und welchen Wert würdest du jetzt für fear_index erwarten wenn es das Suchergebnis von nicht vorhandenen Daten ist? `None` scheint da durchaus plausibel.
Antworten