Forum: PC-Programmierung bahnpreise mittels python ermitteln


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Lars (Gast)


Lesenswert?

Hi,
ich versuche mit python über requests die Preise zu ermitteln.
Die Vorlage habe ich von
https://nickyreinert.de/blog/2020/09/09/das-ticket-preis-system-der-deutschen-bahn-oder-wie-findest-du-den-optimalen-fahrschein-preis/

Da habe ich bei verschiedenen Vorgehen verschiedene Probleme:

1) Preise über reiseauskunft
1
url = "http://reiseauskunft.bahn.de/bin/query.exe/dn"
2
r = requests.get(url=urlReiseauskunft, params=payload)
3
print('Status Code: ', r.status_code)
4
print('URL: ', r.url)
5
#print(r.content)
6
#print(r.text)
7
with open('bahn.html','w') as f:
8
    f.write(r.text)

wenn ich eines von
1
print(r.content)
2
print(r.text)
einkommentiere, bekomme ich den Fehler:

    print(r.content)
                    ^
IndentationError: unindent does not match any outer indentation level

was ist daran falsch?
der status_code ist 200 und die URL wird mir auch richtig ausgegeben.
Wenn ich bahn.html öffne, bekomme ich die richtige seite dargestellt und 
die url führt mich auch zur richtigen seite.
Wie kann ihc mir den Text denn direkt in der konsole ausgeben?

Hintergrund ist, dass ich den Text parsen möchte, um an weitere 
Parameter zu kommen.

2 Möglichkeit über den Sparpreisfinder.
Hier sollte es auch mittels JSON funktionieren
1
data = '{"startSucheSofort":true,"startBhfName":"BERLIN","startBhfId":"00809603","startBhfLocType":"1","zielBhfName":"Stuttgart Hbf","zielBhfId":"008000096","zielBhfLocType":"1","schnelleVerbindungen":true,"klasse":"2","tripType":"return","datumHin":"' + start_date + '","sliderHinMin":"0000","sliderHinMax":"1440","datumRueck":"' + back_date + '","sliderRueckMin":"0000","sliderRueckMax":"1440","travellers":[{"typ":"E","bc":"0"}]}'
2
3
url = 'https://ps.bahn.de/preissuche/preissuche/psc_start.post?country=DEU&lang=de&dbkanal_007=L01_S01_D001_KIN0001_qf-sparpreis-svb-kl2_lz03&ps=1&psc-anfragedata-json='+dat
4
5
r = requests.get(url=url)
6
print('Status Code: ', r.status_code)
7
print('URL: ', r.url)
8
with open('bahn.html','w') as f:
9
    f.write(r.text)
aber wie komme ich hier an die json datei?

Als URL wird mir immer
https://reiseauskunft.bahn.de/bin/query.exe/dn?tbpMode=1&date=%2B1&getstop=1 
ausgegeben

von Εrnst B. (ernst)


Lesenswert?

Lars schrieb:
> was ist daran falsch?

in Python ist die Code-Formatierung wichtig. Du hast eine falsche Anzahl 
an Leerzeichen am Zeilenanfang.

von Hans (Gast)


Lesenswert?

1
def bahnpreis(start, ziel):
2
    return 9.00

von PittyJ (Gast)


Lesenswert?

Εrnst B. schrieb:
> Lars schrieb:
>> was ist daran falsch?
>
> in Python ist die Code-Formatierung wichtig. Du hast eine falsche Anzahl
> an Leerzeichen am Zeilenanfang.

Sollte man nicht, wenn man eine Programiersprache benutzt. zumindest ein 
paar Basics dieser Sprache kennen?
Und das Einrücken steht doch schon im ersten Abschnitt in der Wikipedia:

https://de.wikipedia.org/wiki/Python_(Programmiersprache)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.