Verwendung der Suchfunktion aus der Webseite einer Fluggesellschaft

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
barisoezcan
User
Beiträge: 73
Registriert: Freitag 15. März 2013, 19:38

Hallo Leute =)
Ich weiss nicht, ob ich mit dem Betreff mein Anliegen einigermaßen gut formulieren konnte.

Ich möchte ein Python-Programm schreiben, welches die Suche aus einer Webseite einer Fluggesellschaft (z.B. Ryanair) verwendet und mir als Ergebnis die einzelnen Flüge mit den jeweiligen Preisen und möglichen Destinationen anzeigt.

Hintergrund ist der, dass ich eine personalisierte Suche programmieren möchte, wo ich z.B. meine gewünschte Zeitspanne (z.B. meine Urlaubstage) und einige Abflug-Flughäfen, die in der Nähe von mir liegen, eingebe, und mir das Programm dann zu diesen Daten jeweils passende Flüge (mit Preis, Destination und Uhrzeit) ausgibt. Es ist nämlich ein großer Aufwand, manuell immer einzelne Abflug-Flughäfen mit Zeitspannen einzugeben und zu durchsuchen.

Dafür müsste ich ja irgendwie die Suchmaske von z.B. Ryanair in meinem Python-Code verwenden können. Jedoch weiss ich nicht, wie und ob sich das realisieren lässt.

MfG
BlackJack

@barisoezcan: Das kommt so ein bisschen darauf an wie die jeweilige Webseite das löst und ob und wie sehr sie sich gegen automatisiertes Abfragen ”wehrt”. So eine wirklich ganz allgemeine Lösung wäre die Automatisierung eines Browsers mit entsprechenden (Test)Werkzeugen.
barisoezcan
User
Beiträge: 73
Registriert: Freitag 15. März 2013, 19:38

Kannst du mir da irgendwas empfehlen, bzw. einen konkreten Ratschlag geben?
Ich wollte das z.B. erstmal für den konkreten Fall der "https://www.ryanair.com/de/de/"-Webseite implementieren.
barisoezcan
User
Beiträge: 73
Registriert: Freitag 15. März 2013, 19:38

Kann mir keiner einen konkreten Vorschlag geben? =)
BlackJack

@barisoezcan: Was ist denn die konkrete Frage? Du müsstest halt entweder so etwas wie `requests` und `lxml.html` (eventuell mit BeautifulSoup4 als ”Frontend”) verwenden und ”nachmachen” was beim Browser passiert wenn man sucht, oder so etwas wie Selenium um einen Browser fernzusteuern.
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Es gibt bereits gute Meta-Suchmaschinen, die gleichzeitig mehrere Fluglinien abfragen und auch Flughäfen der Umgebung mit berücksichtigen können. Willst du wirklich das Rad erneut erfinden, oder einfach nur einmal benutzen? Der Aufwand scheint vergleichsweise groß bei relativ geringem Ergebnis. Wenn es dir natürlich nur um eine Übung zur Programmierung geht, ok. Hier ist aber unklar, wie weit dein aktueller Wissensstand ist, ob du in der Lage bist mit den genannten Bibliotheken schon mal ein lauffähiges Beispiel zu produzieren und hier vorzustellen, an dem man dann Kritik üben kann. Ggf. nicht einmal, weil dein Code nicht funktioniert, sondern um besser zu programmieren.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Wenn ich das richtig sehe, dann ist da viel JavaScript mit dabei, was bei mir i. d. R. eine momentan noch nicht zu überwindende Hürde darstellt. Zum Glück habe ich damit wenig zu tun. Der Button "Los geht's" scheint eine Javascript-Funktion "searchFlights()" auszulösen, die ich noch nicht gefunden habe. Im Kern müsstest Du herausfinden, was diese Funktion macht bzw. was die Funktion weitergibt und versuchen das nachzubauen.

Ich habe noch nicht gesehen, dass ich mit requests JS beeinflussen kann und wäre hier durchaus für Infos auch dankbar.

http://docs.python-requests.org/en/master/
https://www.crummy.com/software/BeautifulSoup/bs4/doc/

Grundsätzlich könnte ich damit früher oder später auch mal konfrontiert werden.

PS http://www.marinamele.com/selenium-tuto ... and-python -- habe ich gerade mal gefunden und lese ich.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

RyanAir bietet ja eine schöne REST-Schnittstelle an, bei der man nur Abflugsflughafen, Zielflughafen, Hin- und Rückreisedatum, Anzahl der Flex-Tage und Anzahl der Reisenden angeben muß:

Code: Alles auswählen

import requests
from pprint import pprint
   
URL = 'https://desktopapps.ryanair.com/de-de/availability'

params = {
    "RoundTrip": "true",
    "Origin": "STR",
    "Destination": "MAN",
    "DateOut": "2017-01-18",
    "DateIn": "2017-01-26",
    "FlexDaysOut": 2,
    "FlexDaysIn": 6,
    "ADT": 1,
    "TEEN": 0,
    "CHD": 0,
    "INF": 0,
    "exists": "false",
}

pprint(requests.get(URL, params=params).json())
barisoezcan
User
Beiträge: 73
Registriert: Freitag 15. März 2013, 19:38

Vielen Dank für die zahlreichen Antworten!
Ich werde mich in den nächsten Tagen mit den genannten Tipps mal auseinandersetzen und ggf. den Zwischenstand hier posten.

(PS: Es geht mir nicht wirklich darum, "das Rad neu zu erfinden", sondern um eine weitaus personalisiertere Flugsuche zu programmieren. Bei den bisherigen Suchen von den verschiedenen Anbietern habe ich nicht soo eine große Freiheit, wie ich es gerne hätte.
Als zusätzliches Nebenprodukt ist es natürlich auch eine gute Übung finde ich.)
Antworten