![]() |
Websiteninhalt indexieren und in DB speichern...
Ist es möglich, ein Programm zu schreiben welches:
auf der Lufthansa Seite nach flügen sucht und jeweils die Uhrzeit, Flugnummer und Preise indexiert und in eine Datenbank schreibt ? Ist soetwas möglich, wenn ja was sollte ich mir anschauen an Befehlen etc. pp. Danke. cya, unattended |
Re: Ist es möglich...
Du könntest dir die Internetseite in deinem programm laden (bspw. TWebbrowser), die Formular-felder etc ausfüllen, abschicken und das Ergebniss auswerten.
Ob die Lufthansa damit einverstanden ist, kann ich dir nicht sagen, müsstest du aber bei denen auf der Website finden (ich denke mal nein) gruss PS: Geb deinem Thread bitte mal einen Assagekräftigeren Titel. |
Re: Ist es möglich...
@MrKnogge
1)ja Lufthansa ist damit eiverstanden, habe jemanden der dort arbeitet. Jedoch können die mir keinen direkten Zugriff auf die Datenbank geben, das wäre ja noch schöner, könnte ich mal ebend Flugdaten ändern :mrgreen: zu deinem vorschlag: hört sich soweit nicht schlecht an, jedoch was meinst du mit auswerten ? Ich möchte/muss das so haben, dass ich das in eine datenbank schreiben kann. |
Re: Ist es möglich...
eben, du hast dann quasi die seite wie du sie im InternetExplorer hättest in deinem Programm, und nun müsstest du dir die benötigten Info's raus parsen.
gruss PS: Statt der zusage deine Bekannten der dort arbeitet meinte ich eher etwas schriftliches. |
Re: Websiteninhalt indexieren und in DB speichern...
Wieso die Seite in einem TWebbrowser parsen? Es reicht doch vollkommen, eine ganz normale Anfrage abzugeben und den Rückgabequelltext mit Regulären Ausdrücken auszuwerten, oder? Also so würde ich an die Sache rangehen.
|
Re: Websiteninhalt indexieren und in DB speichern...
hi,
ja habe was schriftliches. Ich meinte eher, das mein Bekannter das bei Lufthansa geregelt habe. Also ich habe hier n Papier mit echter Unterschrift von Lufthansa liegen. Das einzige was ich nicht darf ist die Daten für kommerzielle zwecke zu entwenden, was ich ja nicht mache oder will. zum parsen: Gut, was schlägst du denn vor wie ich da was parsen kann, sodass ich das optimal habe ? Habe sowas noch nie gemacht. Hast du da eventuell beispiele zur Hand ? @moritz hast du ein beispiel, welches das mal simuliert ? Hört sich ja auch logisch an. Das problem was ich wohl hätte ist, wie die Daten dann auslesen kann. danke schonmal. cya, unattended |
Re: Websiteninhalt indexieren und in DB speichern...
Also, die Sache ist so: Wenn du das über einen TWebbrowser machst, dann ist das ganz einfach Resourcenverschwendung, abgesehen davon ist das eine ziemlich unsaubere Lösung - Wieso eine Seite anzeigen, wenn man eh nur am Quellcode interessiert ist?
Wenn man jetzt zum Beispiel das Lufthansa-Formular hast:
Code:
sind die Interessanten Sachen für dich method und action. Method sagt dir den "Übertragungsweg" (In diesem Fall post, der etwas schwerer zu implementieren ist als get, dafür allerdings weniger probleme wegen codierung etc. bereitet). Action sagt dir das Ziel. Jetzt musst du dir noch die Formularfelder raussuchen, die du haben willst, und mit dem ganzen Zeugs dann entweder idHTTP füttern oder das ganze selber Implementieren. Dann bekommst du als Rückgabe den Quelltext der Ergebnisseite, den du dann mit Regulären Ausdrücken (Dazu gibts genug Themen hier) auswerten kannst, und schon bist du bei deinen Ergebnissen.
<form name="fmBooking" method="post" target="_parent" action="https://aero.lufthansa.com/aerodyn/fb_main.aero">
Gruß |
Re: Websiteninhalt indexieren und in DB speichern...
gut, soweit wäre mir das eventuell auch noch klar, wobei ich gerade nicht weiß wie ich idhttp damit füttern soll, aber ich denke das finde ich schon irgendwo.
Aber zum auswerten: Du sagst es gibt genug im Forum ? Nach was sollte ich denn suchen, hab schon nach "webseite auswerten", daten auswerten, auswerten gesuht, aber nichts brauchbares gefunden, womit ich dieses Problem lösen könnte. Ich habe z.B. hier mal ein teil der Webseite:
Delphi-Quellcode:
So, wie komme ich da z.B. an den Flug Lh252 ran, mit dem ersten Preis: 285,37€ ?
<tr>
<td valign="bottom" width="90" class="axisM"> [url="fb_main.aero?action=details&fb_seg=1&fb_con=0"]LH247[/url] [b]<nobr>06:55-08:00</nobr>[/b] </td> <td valign="bottom" width="90" class="axisM"> [url="fb_main.aero?action=details&fb_seg=1&fb_con=1"]LH249[/url] [b]<nobr>08:15-09:20</nobr>[/b] </td> <td valign="bottom" width="90" class="axisM"> [url="fb_main.aero?action=details&fb_seg=1&fb_con=2"]LH251[/url] [b]<nobr>09:55-11:00</nobr>[/b] </td> <td valign="bottom" width="90" class="axisM"> [url="fb_main.aero?action=details&fb_seg=1&fb_con=3"]LH253[/url]<font color=""><sup>(1)</sup></font> [b]<nobr>10:55-12:00</nobr>[/b] </td> <td valign="bottom" width="90" class="axisM"> [url="fb_main.aero?action=details&fb_seg=1&fb_con=4"]LH255[/url]<font color=""><sup>(1)</sup></font> [b]<nobr>12:25-13:30</nobr>[/b] </td> </tr> <tr valign="top"> <td valign="top" width="115" class="axisM"> <span class="hdgM">Hinflug:</span> [url="popup.aero?content=ci_main.aero%3Faction%3Dcity%26city%3DDUS%26popup%3D1"]DUS[/url]-[url="popup.aero?content=ci_main.aero%3Faction%3Dcity%26city%3DBER%26popup%3D1"]TXL[/url] 7.Aug2005 </td> <td colspan="7"></td> </tr> <tr valign="bottom"> <td valign="bottom" class="axisM"><spacer type="block" height="10" width="51"> </td> <td valign="top" colspan="7" width="482" class="axisM"> </td> </tr> <tr valign="top"> <td valign="top" width="115" class="axisM"> [url="fb_main.aero?action=details&fb_seg=0&fb_con=0"]LH252[/url]<font color=""><sup>(1)</sup></font> [b]<nobr>10:55-12:00</nobr>[/b] </td> <td valign="top" width="12" class="axisM"></td> <td valign="top" width="90" class="priceM">[url="fb_main.aero?action=price&fb_select0=0~0~K&fb_select1=1~0~G"]€285,37[/url][img]/img/fly/blank.gif[/img] [img]/img/fly/blank.gif[/img]</td> <td valign="top" width="90" class="priceM">[url="fb_main.aero?action=price&fb_select0=0~0~K&fb_select1=1~1~Y"]€348,37[/url][img]/img/fly/blank.gif[/img] [img]/img/fly/blank.gif[/img]</td> <td valign="top" width="90" class="priceM">[url="fb_main.aero?action=price&fb_select0=0~0~K&fb_select1=1~2~Y"]€348,37[/url][img]/img/fly/blank.gif[/img] [img]/img/fly/blank.gif[/img]</td> <td valign="top" width="90" class="priceM">[url="fb_main.aero?action=price&fb_select0=0~0~K&fb_select1=1~3~K"]€241,37[/url][img]/img/fly/blank.gif[/img] [img]/img/fly/blank.gif[/img]</td> <td valign="top" width="90" class="priceM">[url="fb_main.aero?action=price&fb_select0=0~0~K&fb_select1=1~4~L"]€205,37[/url][img]/img/fly/blank.gif[/img] [img]/img/fly/blank.gif[/img]</td> <td valign="top" width="12" class="axisM"></td> </tr> <tr valign="top"> <td valign="top" width="115" class="axisM"> [url="fb_main.aero?action=details&fb_seg=0&fb_con=1"]LH256[/url]<font color=""><sup>(1)</sup></font> [b]<nobr>14:30-15:35</nobr>[/b] </td> <td valign="top" width="12" class="axisM"></td> <td valign="top" width="90" class="priceM">[url="fb_main.aero?action=price&fb_select0=0~1~K&fb_select1=1~0~G"]€285,37[/url][img]/img/fly/blank.gif[/img] [img]/img/fly/blank.gif[/img]</td> <td valign="top" width="90" class="priceM">[url="fb_main.aero?action=price&fb_select0=0~1~K&fb_select1=1~1~Y"]€348,37[/url][img]/img/fly/blank.gif[/img] [img]/img/fly/blank.gif[/img]</td> <td valign="top" width="90" class="priceM">[url="fb_main.aero?action=price&fb_select0=0~1~K&fb_select1=1~2~Y"]€348,37[/url][img]/img/fly/blank.gif[/img] [img]/img/fly/blank.gif[/img]</td> <td valign="top" width="90" class="priceM">[url="fb_main.aero?action=price&fb_select0=0~1~K&fb_select1=1~3~K"]€241,37[/url][img]/img/fly/blank.gif[/img] [img]/img/fly/blank.gif[/img]</td> <td valign="top" width="90" class="priceM">[url="fb_main.aero?action=price&fb_select0=0~1~K&fb_select1=1~4~L"]€205,37[/url][img]/img/fly/blank.gif[/img] [img]/img/fly/blank.gif[/img]</td> <td valign="top" width="12" class="axisM"></td> </tr> |
Re: Websiteninhalt indexieren und in DB speichern...
Dafür musst du den Quelltext ein bisschen analysieren. Ich hab ihn mir ein bisschen angeschaut, und folgendes ist dabei rausgekommen:
1.) Zu jedem Flug gibt es einen Link:
Code:
2.) Dieser Link enthält eine Segment und einen Con(tinuierliche?) ID
[url="fb_main.aero?action=details&fb_seg=1&fb_con=0"]LH247[/url]
Code:
3.) Genau diese ID's finden sich beim Preis auch:
[url="fb_main.aero?action=details&[b]fb_seg=1[/b]&[b]fb_con=0[/b]"]LH247[/url]
Code:
Und genau auf diese Weise musst du diese Webseite auswerten. Das wäre zum Beispiel schon die Möglichkeit, an den Preis von Flug LH247 ranzukommen. Erst die ID's aus 2. auslesen, dann genau diese in 3. suchen. Und zu [google]Regulären AND Ausdrücke[/google]n sagt dir Google genug.
[url="fb_main.aero?action=price&fb_select0=0~0~K&fb_select1=[b]1[/b]~[b]0[/b]~G"]€285,37[/url]
Gruß |
Re: Websiteninhalt indexieren und in DB speichern...
hmm,
ich hab mir jetzt paar sachen von Google angeschaut, unter anderem die Erklärung von regulären Ausdrücken und Anwendung in der MSDN. Nur versteh ich das nicht genau wie ich das auf meine Sache überleiten soll, geschweige wie der Suchstring lauten muss. cya, unattended |
Re: Websiteninhalt indexieren und in DB speichern...
1. Holen - mit IdHTTP kein Problem, du bekommst das ganze ja in eine stringlist rein
2. durchsuchen - am besten in schritten: a) alle links holen - einfach nach "/<a.*>.*</a>/" suchen. b) aus diesen links die texte rausholen: nach "/>.*</" bringt dir auf jeden fall den flugnamen inklusive dem ende des einleitenden a-tags und des anfangs des schließenden a-tags. ebenso texte und zeiten. mit ein paar einfachen pos- und delete-aktionen solltest du auch den linkstring rausschneiden können, aus dem du mithilfe der IDs dann das ganze verknüpfen kannst. und dann musst du das ganze nur noch ausgeben. Es gibt sicher auch eine monster-REGEX, die dir alles auf einmal in einen array klatscht und du das ganze nur noch anzeigen must, dafür kenn ich mich aber nicht genug damit aus. hab noch nicht besonders viel damit gearbeitet. abert wäre es nicht einfacher, wenn du ihnen ein PHP-Skript gibst, das dir das ganze z.b. als "LH252|10.00-13.00|143" ausgeben? oder dir ganz einfach einen nur-lesen-mysql-account geben lässt? etwas zuerst zu visualisieren, dann zu entvisualisieren und dann noch einmal darzustellen, ist meines erachtens nach ein wenig zu viel overhead. |
Re: Websiteninhalt indexieren und in DB speichern...
hi,
mit mysql account geht nicht. zu dem Vorschlag: Das alle skling plausibel und irgendwie einfach nur ich hab überhaupt kein Plan wie ich das ganze umsetzten kann? |
Re: Websiteninhalt indexieren und in DB speichern...
Einfach mal Anfangen. Das erste, was du machen musst, ist die Formularübermittlung - Damit würde ich anfangen. Wenn du dann soweit bist, dass du den Ergebnisquellcode hast, würde ich mich an die Regulären Ausdrücke setzten - und ich würde dir zu einem "Monster"-RegExp raten, damit hat sich die Sache um einiges schneller.
Eine Alternative zu einer Datenbank wäre eine CSV, aber was willst du denn damit überhaupt machen? |
Re: Websiteninhalt indexieren und in DB speichern...
hmm, das problem sind die regex.
Ich hab schon so vieles durchgelesen und probiert, ich check die einfach nicht. Bin einfach zu dumm oder so, k.a. was ich will ? ich will mehrere flüge von mehreren anbietern in eine db stecken und später wenn ich einen Fug suche, soll er mir den billigsten anbieten. So muss ich nicht auf jeder Seite immer alles neu eingeben und suchen. |
Re: Websiteninhalt indexieren und in DB speichern...
Reguläre Ausdrücke sind nicht leicht zu verstehen, aber wenn es mal geschnackelt hat, dann sollte es kein Problem mehr sei. Lies einfach mehrere Tutorials durch, probier ein bisschen rum.
Seiten, die dir die billigsten Flüge suchen, gibt's außerdem schon zu genüge! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz