raphael: Suchmaschinenergebnisse filtern!

Hallo!

Ich habe folgende Aufgabe und hoffe, Ihr könnt mir ein paar Tips geben.

Ich soll ein Script schreiben, welches Suchmaschinenergebnisse zu einem bestimmten, immer gleichen Stichwort, automatisch in einer Datenbank speichert. Wenn ich die Suche dann eine Woche später nochmal starte, sollen die Ergebnisse von einst mit den neuen Ergebnissen verglichen werden, so dass automatisch nur die Ergebnisse in der Datenbank gespeichert werden, die in der vorherigen Suche nicht gefunden wurden.

Ich hab für alles eine Lösung gefunden, nur nicht für eins:
Wie schaffe ich es, dass mein Script eine Ergebnisseite einer Suchmaschine durchsuchen kann? Geht das mit reinem ASP?

liebe Grüße,
raphael

  1. Ich soll ein Script schreiben, welches Suchmaschinenergebnisse zu einem bestimmten, immer gleichen Stichwort, automatisch in einer Datenbank speichert. Wenn ich die Suche dann eine Woche später nochmal starte, sollen die Ergebnisse von einst mit den neuen Ergebnissen verglichen werden, so dass automatisch nur die Ergebnisse in der Datenbank gespeichert werden, die in der vorherigen Suche nicht gefunden wurden.

    Ich hab für alles eine Lösung gefunden, nur nicht für eins:
    Wie schaffe ich es, dass mein Script eine Ergebnisseite einer Suchmaschine durchsuchen kann? Geht das mit reinem ASP?

    Hallo Raphael

    1. zuerst musst du einen User-Agent generieren:
      Set HttpObj = Server.CreateObject("AspHTTP.Conn")

    2. dann die URL eingeben
      HttpObj.Url = "http://www.suche.de/query=" & keyWord

    3. dann den Request ausführen
      strResult = HttpObj.GetURL

    nun ist in strResult das gesamte Ergebnis. Jetzt kannst du die Seite durchsuchen, mit Instr (Zeichenfolge in einem String suchen und dessen Position zurückgeben)

    anfang = Instr(strResult, "<TD>")  ' html-code vor dem gesuchten Teil
    ende = Instr(strResult, "</TD>") ' html-code nach dem    "        "
    laenge = ende-anfang

    if laenge>1 Then
       ausgabe = MID(strResult,anfang,laenge)
      rem eventuell noch einige Codes ausschneiden
       ausgabe=Replace(ausgabe,"<Font ...","")
       ausgabe=Replace(ausgabe,"</Font>","")
    End If

    Ich hoffe, dass das etwas Hilft

    Philipp

    1. vielen dank für deine hilfe phillip...

      ich bekomme allerdings die fehlermeldung "ungültige progID" und kann damit nichts anfangen. kann mir da jemand weiterhelfen?

      greetings, raphael

    2. In jedem Falle, das ist richtig, benötigst Du zunächst den Inhalt der fremden HTML-Seite (Resultpage des Indexdienstes) in einer lokalen Variable. Dazu kannst Du ISAPI-Komponenten verwenden. Phillips Ansatz hierzu (httpCon)ist eine gängige Methode gewesen, bis XML bekannter wurde. Mittels "Set objXmlHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")" kannst Du das ganze in einen XML-Stream laden, was u.a. auch die Möglichkeit bietet, erweiterte Headers, Authent etc. an die Seite zu senden.

      In jedem Falle ist der zweite Schritt das Auswerten des nun vorliegenden Strings. Im Gegensatz zur INSTR Function solltest Du jedoch besser regular expressions verwenden, da in dem von Dir aufgezeigten Falle eine Reihe von Ergebnisssätzen nach einem relativ festen Muster zu erwarten sind.

      Zu guter letzt brauchst Du die gewonnenen Infos in jeder nun existenten Variable nur noch zur DB zu pinseln, mittels simplen ADO.COMMANDS (ist besser und fixer, als die üblichen Conn.Execute(Query) oder Recordset AddNew Methoden und verhindert auftretende Fehler, falls ein ' oder ähnliches Commandsign mal nicht ordnungsgemäß escaped sind. Ausserdem erleichtert die Command-Property Methode es auch, das Ganze in einem Loop einzubinden:

      - Define DB-Command
       - Define external URL
       - get URL
       - parse varURLcontent
           - (loop, solange matches im String zu finden sind) for each match
                            Command-Parameter1 = blah1 (zb URL)
                            Command-Parameter2 = blah2... (zb Description)
      cleanup

      Denk in jedem Falle dran, daß Du eventuell den ResultURL auch auf das Vorhandensein weiterer Resultpages scannen musst.

      BTW, das Ganze habe ich vor geraumer Zeit für das Durchsuchen von einigen *.EDU sites geschrieben und es archiviert von dortaus diverse akademische Texte, da diese oftmals recht schnell wieder von den Seiten verschwanden und ich sie nicht rechtzeitig lesen konnte. Ein kleines Tool hilft mir dann hier lokal noch, wenn z.b eine Suchmaschine den Eintrag noch hat, aber das Dokument am Server nicht mehr vorliegt und leitet mich dann automatisch auf meine lokale Resource um (SQL-Server)
      Ich schätze mal, das von Dir angestrebte Tool soll ähnliches erreichen (Vorabfilterung von Contents zur leichteren Auffindung von relevanten Inhalten im Web)

      1. Kleinigkeit vergessen:

        alternativ bietet Dir in den neuen MDAC's ADO eine klasse Möglichkeit des Zugriffs auf Daten in Textform:

        STREAM ist das Stichwort. Damit lässt sich nicht nur eine remote-datei (URL) öffnen, auch lässt sich damit endlich auf vernünftige Weise weitestgehend die Funktionalität des doch recht schlechten FSO unter IIS umgehen. STREAM ist leistungsfähiger, schneller, sicherer und kann, was den Zugriff auf lokale Dateien anbelangt alle "features" des FSO. In jedem Falle nen Blick wert. (Ich kannte damals, als ich den Kram gescriptet habe, das STREAM noch nicht (obwohl es bereits existierte) und habe daher das XML verwendet, wobei es dafür ja auch völlig ausreichte, da es ja "nur" ums Lesen geht.