Klaus: Wie kann ich fremde Seite mit JavaScript lesen und auswerten?

Hallo,

wie kann ich mit Javascript eine fremde Seite über deren URL aufrufen und dann deren Quelltext in einer Variablen speichern?. Ziel ist, bestimmte Textelemente der fremden Seite auszuwerten und in der eigenen Seite anzuzeigen. Vielleicht gibt es dafür auch andere Wege?

Vielen Dank für Eure Tipps,
Klaus

  1. Mahlzeit,

    wie kann ich mit Javascript eine fremde Seite über deren URL aufrufen und dann deren Quelltext in einer Variablen speichern?

    Sollte über HTTPRequest gehen, also die gleiche Abfrage, wie sich auch AJAX die Daten holt.

    Ziel ist, bestimmte Textelemente der fremden Seite auszuwerten und in der eigenen Seite anzuzeigen.

    Das du dich damit evtl. strafbar macshst, ist dir klar?

    Vielleicht gibt es dafür auch andere Wege?

    Ja, du kannst den Seitenbetreiber fragen, ob er eine passende API oder einen RSS-Feed zur Verfügung stellt, da du eh seine Erlaubnis benötigst um seine Seiteninhalte auszuwerten und auf einer eigenen Seite anzuzeigen.
    Desweiteren ist eine CLientseitige lösung dafür immer eine schlechte Wahl, da jeder User Javascript abschalten kann

    1. Hi,

      »» wie kann ich mit Javascript eine fremde Seite über deren URL aufrufen und dann deren Quelltext in einer Variablen speichern?
      Sollte über HTTPRequest gehen, also die gleiche Abfrage, wie sich auch AJAX die Daten holt.

      Die Same Origin Policy wird's verhindern.

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. Mahlzeit,

        Die Same Origin Policy wird's verhindern.

        Da ich es noch nie probiert hab, wusste ich das nicht, aber jetzt hab ich wieder was gelernt.
        Macht ja auch Sinn, dass es nicht geht.

        1. Hi,

          Macht ja auch Sinn, dass es nicht geht.

          "Macht" es nicht (weder inhaltlich noch grammatikalisch ;->).

          Und da das die Browser-Entwickler auch erkannt haben, daß es keinen Sinn hat, wenn man wg. Same-Origin-Policy eine fremde Webseite nicht einlesen kann, obwohl das mit einer serverseitigen Scriptsprache geht (also mit JS nur über den Umweg über serverseitige Techniken), deswegen kann die neue Browsergeneration (IE 8, FF 3.1, ...) dies auch, bzw. wird es können.

          W3C: Cross-Origin Resource Sharing (Access Control)

          IE 8: XDomainRequest

          Die wichtigsten Unterchiede zw. beiden

          Gruß, Cybaer

          --
          Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
          (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)
          1. Und da das die Browser-Entwickler auch erkannt haben, daß es keinen Sinn hat, wenn man wg. Same-Origin-Policy eine fremde Webseite nicht einlesen kann, obwohl das mit einer serverseitigen Scriptsprache geht (also mit JS nur über den Umweg über serverseitige Techniken), deswegen kann die neue Browsergeneration (IE 8, FF 3.1, ...) dies auch, bzw. wird es können.

            Das ist kein Argument. Es ist weit eleganter, Inhalte auf dem Server aufzubereiten, denn dafür die Browser zu beanspruchen.

            W3C: Cross-Origin Resource Sharing (Access Control)

            Leider.

            mfg Beat

            --
            ><o(((°>           ><o(((°>
               <°)))o><                     ><o(((°>o
            Der Valigator leibt diese Fische
            1. Hi,

              Das ist kein Argument.

              Nicht? Angesichts der seit Jahren nicht abebbenden Fragen, wie man das mit JS (pur) lösen kann, scheint mir da zumindest ein gewisser Bedarf zu sein.

              Es ist weit eleganter, Inhalte auf dem Server aufzubereiten, denn dafür die Browser zu beanspruchen.

              Es ist weit effizienter, die Last der Inhaltsaufbereitung zumindest teilweise dort stattfinden zu lassen, wo der Inhalt ohnehin genutzt werden soll: auf dem Client.

              Mindestens wenn man, wie wohl die meisten, nicht die Möglichkeit/das Geld hat, seine Serverleistung zu skalieren.

              Und ich habe es bislang auch nie als sonderlich elegant empfunden, wenn ich dieses Problem selbst hatte, mit Ajax zu arbeiten (wie gewünscht und gewollt), und die Anfragen dabei nur aus dem einzigen Grund über den Server zu schicken, weil ich direkt nicht drankomme. Verarbeitet werden die Daten auch in diesem Fall nur mit JS - der Server dient also bloß als Proxy, was unnötig Resourcen (meines Servers) und Zeit (des Users) kostet.

              »» W3C: Cross-Origin Resource Sharing (Access Control)
              Leider.

              Es wird keiner "gezwungen" irgendeine Webtechnik einsetzen zu müssen. :-)

              Ich freue mich jedenfalls drauf ...

              Gruß, Cybaer

              --
              Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
              (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)
    2. Mahlzeit,

      »» wie kann ich mit Javascript eine fremde Seite über deren URL aufrufen und dann deren Quelltext in einer Variablen speichern?

      Sollte über HTTPRequest gehen, also die gleiche Abfrage, wie sich auch AJAX die Daten holt.

      Ein Ajax-Request funktioniert nur an den Server, der auch die Seite ausgeliefert hat in der der Ajax-Request erfolgt.

      Hotte

      --
      Nimm Soda statt Ajax.
  2. wie kann ich mit Javascript eine fremde Seite über deren URL aufrufen und dann deren Quelltext in einer Variablen speichern?.

    Offenbar hast du vor fremdem Gut keinen Respekt.

    Hole dir zuerst eine Lizenz ein, damit du das darfst. Mit der Lizenz bekommst du eventuell auch eine API.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. »» wie kann ich mit Javascript eine fremde Seite über deren URL aufrufen und dann deren Quelltext in einer Variablen speichern?.

      Offenbar hast du vor fremdem Gut keinen Respekt.

      Offenbar hast Du, ohne offensichtlichen Grund, von manchen Leuten eine schlechte Meinung.

  3. hi,

    wie kann ich mit Javascript eine fremde Seite über deren URL aufrufen und dann deren Quelltext in einer Variablen speichern?. Ziel ist, bestimmte Textelemente der fremden Seite auszuwerten und in der eigenen Seite anzuzeigen. Vielleicht gibt es dafür auch andere Wege?

    Zum Auslesen von Quelltext eines URL brauchst Du einen User-Agent. Das kann sein ein ordinärer Browser oder ein dazu geeignetes Programm wie z.B. wget. Oder ein Script, falls Du Perl zur Verfügung hast, kannst Du mit dem Modul LWP  (Library for wwwAccess with Perl) sowas recht einfach realisieren.

    Falls das auf dem Webserver gemacht werden soll, stelle sicher, dass Dein Provider nicht per Firewall unterbindet (wie meiner).

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. Hi,

      Oder ein Script, falls Du Perl zur Verfügung hast,

      Die Wahrscheinlichkeit, daß Perl innerhalb von Javascript zur Verfügung steht, hat eine starke Tendenz gegen 0.

      Die Aufgabe war "mit Javascript".

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. Hi,

        »» Oder ein Script, falls Du Perl zur Verfügung hast,

        Die Wahrscheinlichkeit, daß Perl innerhalb von Javascript zur Verfügung steht, hat eine starke Tendenz gegen 0.

        Die Aufgabe war "mit Javascript".

        cu,
        Andreas

        --
        Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
        1. Hi,

          Wieso sollte prinzipiell ein HTTP-Request mit Javascript nicht möglich sein?

          XmlHttpRequest existiert.

          Daß dabei die Same Origin Policy greift, ändert ja nichts daran. Und auch das Xml am Anfang des Objektnamens - denn niemand ist dadurch gezwungen, im Request oder in der Response auch tatsächlich XML zu verwenden.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          O o ostern ...
          Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Hi Andreas,

            Wieso sollte prinzipiell ein HTTP-Request mit Javascript nicht möglich sein?

            XmlHttpRequest existiert.

            Daß dabei die Same Origin Policy greift, ändert ja nichts daran. Und auch das Xml am Anfang des Objektnamens - denn niemand ist dadurch gezwungen, im Request oder in der Response auch tatsächlich XML zu verwenden.

            Klar geht das. Im Thread verstreut steht ja auch alles (deswegen musste ich hier grinsen). Btw., Klaus beschränkte sich ja nicht auf Javascript sondern auch auf "andere Wege".

            Nun gut, machen wir mal was mit Javascript: einen HTTPRequest. Aufgrund der Same Origin Policy kann der jedoch nicht an eine fremde Seite (Aufgabenstellung) gehen.

            Also schicken wir den HTTP-Request an den eigenen Server. Dort wartet ein Perl-Script schon darauf, was wir entweder schon haben oder erst programmieren müssen. Nennen wir es 'proxy.pl'. proxy.pl nimmt den Request und reicht den weiter an die fremde Seite, die antwortet mit Text. proxy.pl schnappt sich diese Response und schickt die letztendlich zurück an den eigentlichen Requester, wo das mit entsprechenden DOM-Methoden aufgearbeitet und eingebaut wird.

            Nun haben wir alles: Ein bischen Javascript und ein bischen Perl ;-)

            Hotte

            --
            Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
  4. Hi

    wie kann ich mit Javascript eine fremde Seite über deren URL aufrufen und dann deren Quelltext in einer Variablen speichern?

    Das Googlezauberwort heisst "Screen Scraping".

    Gruss,
    nam