Zahl auslesen

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
Peak_me
User
Beiträge: 92
Registriert: Sonntag 27. Januar 2008, 03:09

Hallo!

Ich möchte von der Seite http://flug.ab-in-den-urlaub.de/ die Flugpreise für verschiedene Tage und Daten auswerten.
Sehr hilfreich dabei ist die Bedeutung des Suchlinks:

"http://flug.ab-in-den-urlaub.de/" +
"itineraries.html?sid=df7db7b1ee91f08b3ea38d83fc6dd032&ibeParam%5BflightType%5D=OW&
ibeParam%5BaccDep%5D=TXL <<< Abflugort
&ibeParam%5BaccArr%5D=FRA <<< Zielort
&ibeParam%5BaccDepMulti%5D=TRUE&ibeParam%5BaccArrMulti%5D=FALSE
&ibeParam%5BdepCity%5D=Huhu <<< Abflugort, der in der Suchzeile steht, aber für das Ergebnis unerheblich ist
&ibeParam%5BarrCity%5D=Hallo <<< Zielort, der in der Suchzeile steht
&ibeParam%5BdepartureDate%5D=20.09.2008 <<< Datum
&ibeParam%5BreturnDate%5D=&ibeParam%5BdepartureTimeRange%5D=&ibeParam%5BreturnTimeRange%5D=&ibeParam%5BpaxAdt%5D=1&ibeParam%5BpaxChd%5D=0
&ibeParam%5BpaxInf%5D=0&ibeParam%5BnonStop%5D=FALSE
&ibeParam%5BcabinClass%5D=Y&ibeParam%5BdepAirline%5D=&ibeParam%5BdepartureDatetime%5D=&ibeParam%5BreturnDatetime%5D=&ibeParam%5BclickAndMix%5D=Flight&Schnellsuche="

Diese Daten verändere ich dann entsprechend und lasse mir die Suchergebnisse ausgeben.

Das Auslesen wollte ich einfach mit

Code: Alles auswählen

html=urlopen('URL').read()
daten=findall('Flugdauer.*<inklusive',html)
machen.

Doch erscheint bei

Code: Alles auswählen

print html
nur der html-Code der Seite, indem jedoch nicht die Flugdaten, sondern nur das Seitenlayout enthalten sind.
Wie komme ich nun an die Daten?

Meine erste Idee war, mit Sendkeys den Seitentext im Browser in die Zwischenablage zu kopieren

Code: Alles auswählen

SendKeys("""\
^a
^c
 """, 0.1)
und dann mit

Code: Alles auswählen

import win32clipboard as a 
import win32con,re

a.OpenClipboard() 
ablage=a.GetClipboardData(win32con.CF_TEXT)
print ablage
die Zwischenablage auszulesen und diese dann nach den Flugdaten zu durchsuchen, die dann dort enthalten sind.

Es würde funktionieren, aber das geht bestimmt auch noch eleganter.
Fällt euch was anderes ein?


Gruß
Paul
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

schau dir urllib2 an und prüf die seite auf cookies.

wahrscheinlich werden die session id's per cookies gespeichert.
zoranthus
User
Beiträge: 4
Registriert: Mittwoch 9. Mai 2007, 17:11

Hi,

wie's aussieht verwendet die Webseite Sessions und Cookies... die session ID, die in der URL weitergegeben wird, wird nicht mehr / für den python-requester gar nicht gültig sein und damit landest du auf der Such- und nicht auf der Trefferseite. Und ohne ID gibt's nur einen Redirect zur Suchseite.

Ich bin auch kein Experte darin, aber ich würde es so angehen:

Code: Alles auswählen

import urllib2
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
urllib2.install_opener(opener)
opener.open("http://flug.ab-in-den-urlaub.de/")       #<- Gültige session id und cookie abholen
x=opener.open("angepasste URL mit such-string").read()
print x #HTML-Version der Ergebnisseite.
Den Quellcode wirst du dann wohl oder übel mit regulären Ausdrücken parsen müssen, aber das scheint ja nicht so problmatisch zu sein.
Benutzeravatar
snafu
User
Beiträge: 6736
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Falls Mad-Martys Vorschlag nicht zum Erfolg führt, würde ich an deiner Stelle "mechanize" in Betracht ziehen.
Peak_me
User
Beiträge: 92
Registriert: Sonntag 27. Januar 2008, 03:09

Ich habe zoranthus' Vorschlag probiert.
"Ihre Sitzung konnte nicht verifiziert werden. Möglicherweise haben Sie zu lange keine Aktion ausgeführt oder diese URL über einen Favoriten aufgerufen. Bitte starten Sie die Anwendung neu."
Scheint nicht zu gehen...
Was meinst du mit "mechanize", snafu?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Er meint das `mechanize'-Modul: http://wwwsearch.sourceforge.net/mechanize/
Antworten