@onur22: Als erstes wäre ein Blick in den
Style Guide for Python Code angebracht was die Namensschreibweisen angeht.
Obwohl, nein, als erstes sollte man den offensichtlichen Syntaxfehler beseitigen.
Funktionen/Methoden werden üblicherweise nach der Tätigkeit benannt die sie ausführen. `amazon_checker()` ist keine Tätigkeit.
`get_amazon` wäre ein Name für eine Funktion, aber nicht für eine Antwort vom Server.
`Amzn` ist dann für gar nichts ein guter Name weil komisch und kryptisch abgekürzt. Ab hier ist der Code auch falsch, denn `data` ist ein `bytes`-Objekt und auf dessen Zeichenkettenrepräsentation will man nicht arbeiten. An der Stelle würde ich dann auch von `urllib3` Abstand nehmen und `requests` verwenden, was netterweise auch den korrekt dekodierten Inhalt der Antwort zur Verfügung stellt, so das man nicht selber versuchen muss heraus zu finden wie die Antwort kodiert ist.
`str.find()` gibt bereits eine ganze Zahl zurück, da macht es keinen Sinn die an den Namen `TextPassage` zu binden und dann noch mal als `int()` umgewandelt an den Namen `Nummer`. Beide Namen sind auch nicht wirklich gut. Zudem hat `find()` das Problem das es eine -1 zurück gibt wenn der Text nicht gefunden wird, Du das aber überhaupt nicht prüfst, sondern diese -1 als Index in die Zeichenkette verwendest, was ja gültig ist aber ein total falsches Ergebnis zur Folge hat. `find()` sollte man deswegen nicht verwenden, sondern die `index()`-Methode bevorzugen. Die lässt einen nicht einfach ignorieren und mit falschen Werten weiter machen wenn der Text nicht gefunden wird.
Das sähe also dann eher so aus:
Code: Alles auswählen
#!/usr/bin/env python3
import requests
def check_amazon():
response = requests.get('https://www.finanzen.net/aktien/Amazon-Aktie')
response.raise_for_status()
text = response.text
index = text.index('col-sm-4 text-sm-right text-nowrap">')
print('Amazon Kurs ' + text[index + 36:index + 44] + ' €')
Und Du hast natürlich recht, dass das Fragment des HTML-Quelltexts nach dem gesucht wird, und die Versatzwerte für den Slice-Zugriff sich ändern können und dieser Ansatz deshalb nicht sehr robust ist. Dafür nimmt man normalerweise einen HTML-Parser wie `lxml.html` oder BeatifulSoup4 und orientiert sich mehr an der Struktur der Webseite. Die kann sich zwar auch ändern, aber der Ansatz ist robuster.
Und man möchte das vielleicht etwas flexibler gestalten. Also beispielsweise keine Funktion die speziell Amazon's Aktienwert ausgibt, sondern eine wo man den Namen der Aktie als Argument übergeben kann.
Eine Trennung zwischen Benutzerinteraktion und Aktienwert ermitteln wäre vielleicht auch gut. Also eine Funktion die den Aktienwert als Rückgabe hat und der Aufrufer dann entscheiden kann, was er mit dem Wert machen möchte.