Seite 1 von 1

Zahl auslesen

Verfasst: Sonntag 24. August 2008, 20:09
von Peak_me
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

Verfasst: Montag 25. August 2008, 14:27
von Mad-Marty
schau dir urllib2 an und prüf die seite auf cookies.

wahrscheinlich werden die session id's per cookies gespeichert.

Verfasst: Montag 25. August 2008, 14:38
von zoranthus
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.

Verfasst: Montag 25. August 2008, 14:51
von snafu
Falls Mad-Martys Vorschlag nicht zum Erfolg führt, würde ich an deiner Stelle "mechanize" in Betracht ziehen.

Verfasst: Montag 25. August 2008, 20:02
von Peak_me
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?

Verfasst: Montag 25. August 2008, 20:46
von cofi
Er meint das `mechanize'-Modul: http://wwwsearch.sourceforge.net/mechanize/