Was sind die Vor- und Nachteile der verschiedenen Möglichkeiten von Webseiten zu analysieren?

StackOverflow https://stackoverflow.com/questions/918605

Frage

Ich möchte einige Code schreiben, die einige Statistiken und einen Bericht auf einer Webseite und ihr Vermögen und erstellt aussieht. Vermögenswerte würden Bilder. Ich möchte in der Lage sein, Links zu verfolgen, oder zumindest versuchen, Menüs auf der Seite zu identifizieren. Ich würde auch eine Vermutung nehmen gerne an, was CMS die Website erstellt, basierend auf Klassennamen und so weiter.

Ich gehe davon aus, dass die Website angemessen statisch ist, oder von einem CMS angetrieben, aber es ist nicht so etwas wie ein RIA.

Ideen darüber, wie ich Fortschritte könnten.

1) Last-Site in ein iFrame. Das wäre schön, weil ich es mit jQuery analysieren konnte. Oder könnte ich? Scheint, wie ich durch Cross-Site-Scripting-Regeln behindert werden würde. Ich habe Anregungen rund um diese Probleme zu bekommen gesehen, aber ich gehe davon aus Browsern auf solche Dinge klemmen nach unten weiter. Würde ein Bookmarklet helfen?

2) Ein Firefox-Add-on. Dies würde lassen Sie mich um die Cross-Site-Scripting-Probleme bekommen, nicht wahr? Scheint machbar, weil Debugging-Tools für Firefox (und Greasemonkey, was das betrifft) können Sie alle möglichen Dinge tun.

3) Besorgen Sie sich die Website auf der Serverseite. Verwenden Sie Bibliotheken auf dem Server zu analysieren.

4) YQL. Ist das nicht ziemlich viel gebaut für das Parsen von Seiten?

War es hilfreich?

Lösung

Das hängt wirklich von der Skala Ihres Projektes. Wenn es nur lässig ist, nicht voll automatisiert, würde ich stark ein Firefox Addon vorschlagen.

Ich bin in der Mitte von ähnlichem Projekt. Es muss das DOM einer mit Javascript generierte Seite analysieren. Das Schreiben einer serverseitigen Browser war zu schwierig, so wandten wir uns an einigen anderen Technologien: Adobe AIR, Firefox Addons, userscripts etc.

Fx Add-on ist groß, wenn Sie die Automatisierung nicht brauchen. Ein Skript kann die Seite, zeigen Ihnen die Ergebnisse analysieren, fragen Sie die Teile zu korrigieren, dass sie aus und schließlich schreiben die Daten zu einem gewissen Backend unsicher ist. Sie haben Zugriff auf das gesamte DOM, so dass Sie nicht eine JS / CSS / HTML / was auch immer Parser schreiben müssen (das Höllenjob wäre!)

Eine andere Möglichkeit ist Adobe AIR. Hier haben Sie mehr Kontrolle über die Anwendung - Sie können es im Hintergrund starten, tun alle das Parsen und Analyse ohne Ihre Interaktion. Der Nachteil ist, - Sie haben keinen Zugriff auf alle DOM der Seiten. Der einzige Weg, dies zu realisieren passieren ist eine einfache Proxy einzurichten, dass Ziel URL abruft, fügt einige Javascript (eine vertrauenswürdige nicht vertraute Sandboxbrücke erstellen) ... Es ist ein schmutziger Hack, aber es funktioniert.

Edit: In Adobe AIR gibt es zwei Möglichkeiten, um eine ausländische Webseite des DOM zugreifen:

  • Laden Sie es über Ajax, erstellen Htmlloader-Objekt, und füttern die Antwort hinein (loadString Methode IIRC)
  • ein iframe erstellen, und die Seite in nicht vertrauenswürdigen Sandbox laden.

Ich erinnere mich nicht, warum, aber die erste Methode fehlgeschlagen für mich, so dass ich die andere verwenden (ich glaube, es gibt einige Sicherheitsgründe beteiligt war, dass ich nicht umgehen konnte). Und ich hatte eine Sandbox zu erstellen, um Zugang zu Website DOM. Ist hier ein bisschen über mit Sandboxbrücken beschäftigen. Die Idee ist, einen Proxy zu schaffen, die eine einfache JS fügt hinzu, dass schafft childSandboxBridge und macht einige Methoden zur Mutter (in diesem Fall: die AIR-Anwendung). Der Skriptinhalt ist so etwas wie:

window.childSandboxBridge = {
   // ... some methods returning data
}

(Vorsicht - es gibt Grenzen dessen, was man über die Sandbox-Brücke geleitet werden - keine komplexen Objekten sicher verwenden nur die primitiven Typen)

Also, der Proxy grundsätzlich mit allen Anfragen manipulieren, die HTML oder XHTML zurückgegeben. Alle anderen wurde nur durch unverändert weitergegeben. Ich habe das Apache + PHP getan, kann aber mit einem echten Proxy mit einigen Plugins / kundenspezifische Module sicher durchgeführt werden. Auf diese Weise hatte ich den Zugriff auf DOM von jeder Website.

Ende bearbeiten .

Der dritte Weg, den ich kenne, die härteste Art und Weise - eine Umgebung, ähnlich denen auf Browsershots einzurichten. Dann sind Sie mit firefox mit Automatisierung. Wenn Sie einen Mac OS X auf einem Server haben, können Sie mit Actionscript, spielen für Sie die Automatisierung zu tun.

Also, um es zusammenzufassen:

  • PHP / Server-Skript - Sie haben Ihren eigenen Browser, JS-Engine, CSS-Parser, etc. zu implementieren, etc. völlig unter Kontrolle und automatisierte statt
  • .
  • Firefox Addon - hat Zugriff auf DOM und alle Sachen. Erfordert Benutzer es (oder zumindest eine offene Firefox-Sitzung mit irgendeiner Art von Autonachlademode) zu betreiben. Nizza-Schnittstelle für einen Benutzer, den gesamten Prozess zu führen.
  • Adobe AIR - erfordert eine funktionierende Desktop-Computer, schwieriger als ein Fx Addon zu schaffen, aber leistungsfähigeren
  • .
  • Automatische Browser - mehr von einem Desktop-Programmierung Problem, dass webdevelopment. Kann auf einem Linux-Terminal ohne grafische Umgebung einzurichten. Benötigt Hacking Fähigkeiten Master. :)

Andere Tipps

Mein Vorschlag wäre:

a) Wählen Sie eine Skriptsprache. Ich schlage vor, Perl oder Python. Auch curl + bash, aber es schlecht keine Ausnahmebehandlung

b) Legen Sie die Homepage über ein Skript, eine Python oder Perl-Bibliothek. Versuchen Sie Perl WWW :: Modul Mechanize.

Python viel Einbaumodul hat, versuchen Sie auch einen Blick auf www.feedparser.org

c) Überprüfen Sie den Server-Header (über den HTTP HEAD-Befehl) Anwendungsservernamen zu finden. Wenn Sie Glück haben, werden Sie auch die CMS Namen (i.d. Wordpress, etc.).

d) Verwenden Sie Google XML-API so etwas wie „link: sitedomain.com“ zu fragen, Links, um herauszufinden, auf der Website zeigen: wieder werden Sie Codebeispiele für Python auf Google-Homepage zu finden. Auch anfragende Domain zu Google-Ranking kann hilfreich sein.

e) Sie können die Daten in einer SQLite db sammeln, dann schreibt Prozess sie in Excel.

Sie sollten einfach die Quelle holen (XHTML / HTML) und analysieren es. Sie können, dass fast jeder modernen Programmiersprache tun. Von Ihrem eigenen Computer, der mit dem Internet verbunden ist.

iframe ist ein Widget für die Anzeige von HTML-Inhalt, dann ist es keine Technologie für die Datenanalyse. Sie können die Daten analysieren, ohne sie überall angezeigt werden. Sie haben nicht einmal einen Browser benötigen.

Tools in Sprachen wie Python, Java, PHP sind sicherlich leistungsfähiger für Ihre Aufgaben als Javascript oder was auch immer Sie in den Firefox-Erweiterungen haben.

Es spielt auch keine Rolle, welche Technologie hinter der Website ist. XHTML / HTML ist nur eine Zeichenfolge, unabhängig davon, wie ein Browser es macht. Um Ihre „Assets“ Sie werden einfach nach bestimmten HTML-Tags wie „img“, „Objekt“ usw. zu finden.

Ich denke, eine eine Verlängerung schriftlich an Firebug proabably einer der einfachste Weg wäre, mit zu tun. Zum Beispiel YSlow wurde oben auf Firebug entwickelt und einige der Features bietet Sie suchen für (zB Bild, CSS und Javascript-Zusammenfassungen).

Ich schlage vor, Sie versuchen, Option # 4 zuerst (YQL): Der Grund dafür ist, dass es so aussieht können Sie alle Daten, die Sie benötigen und Sie können dann Ihr Werkzeug als eine Website bauen oder so, wo Sie Informationen über eine Website bekommen können, ohne tatsächlich auf der Seite in Ihrem Browser zu gehen. Wenn YQL arbeitet für das, was Sie brauchen, dann sieht es aus wie Sie die größte Flexibilität mit dieser Option haben würde.

Wenn YQL nicht pan out, dann schlage ich vor Sie gehen mit der Option # 2 (a Firefox AddOn).

Ich denke, man sollte wohl versuchen und bleibt weg von Option # 1 (Iframe) aufgrund der Cross-Site-Scripting-Probleme sind Sie bereits kennen.

Auch habe ich verwendet Option # 3 (Besorgen Sie sich die Website auf der Server-Seite) und ein Problem, das ich in der Vergangenheit lief habe, ist die Website packte Laden des Inhalts nach der Tat ist mit AJAX aufruft. Zu der Zeit fand ich keinen guten Weg, um den vollen Inhalt der Seiten, zu ergreifen, die AJAX - SO SEIN DIESER OBSTACLE VORSICHTIGES! Andere Leute hier haben sich in das lief auch finden Sie in diesem eine dynamische Website Scrape

DIE AJAX dynamischer Inhalt PROBLEM: Möglicherweise gibt es einige Lösungen für das Ajax-Problem sein, wie die Verwendung von AJAX selbst den Inhalt und die Verwendung der evalScripts zu greifen: true Parameter. Auch die folgenden Artikel für weitere Informationen und ein Problem, das Sie benötigen könnten sich bewusst sein, mit wie bewertet Javascript aus dem Inhalt Werke packte werden:

Prototype-Bibliothek: http://www.prototypejs.org/api/ajax/updater

Message Board: http: //www.crackajax. net / Foren / index.php? action = vthread & Forum = 3 & topic = 17

Oder wenn Sie bereit sind, Geld ausgeben, werfen Sie einen Blick auf diese: http://aptana.com/jaxer/guide/develop_sandbox.html

Hier ist ein hässliches (aber vielleicht nützlich) Beispiel einer .NET-Komponente namens WebRobot Inhalte von einer dynamischen AJAX fähigen Website verschrotten wie Digg.com. http://www.vbdotnetheaven.com/UploadFile/fsjr/ajaxwebscraping09072006000229AM/ajaxwebscraping. aspx

Auch hier ist ein allgemeiner Artikel über die Verwendung von PHP und die Curl-Bibliothek alle Links von einer Webseite verschrotten. Allerdings bin ich nicht sicher, ob dieser Artikel und die Curl-Bibliothek, die die AJAX Inhalt Ausgabe behandelt: http://www.merchantos.com/makebeta/php/scraping -Links-mit-php /

Eine Sache habe ich nur gedacht, dass könnte funktionieren ist:

  1. den Inhalt greifen und bewerten es mit AJAX.
  2. , um den Inhalt auf den Server senden.
  3. bewerten die Seite, Links, etc ..
  4. [optional] den Inhalt als eine lokale Seite auf dem Server gespeichert werden.
  5. geben die Statistiken Infos zurück auf die Seite.
  6. [optional] Anzeige zwischengespeichert lokale Version mit Hervorhebung.

^. Hinweis: Wenn eine lokale Version zu speichern, Sie reguläre Ausdrücke verwenden wollen relativen Link Pfade zu konvertieren (für Bilder vor allem) korrekt sein

Viel Glück! Nur bitte beachten Sie die AJAX-Problem. Viele Websites heutzutage laden Inhalte dynamisch mit AJAX. Digg.com tut, MSN.com tut es Nachrichten-Feeds, etc ...

Sein erster Linie ein .NET-Programmierer in diesen Tagen, mein Rat wäre C # oder eine andere Sprache mit .Net Bindungen zu verwenden. Verwenden Sie die WebBrowser rel="nofollow die Seite laden steuern und dann durch die Elemente in dem Dokument (via GetElementsByTagName () ) zu bekommen, Links, Bilder usw. Mit einer wenig zusätzlichen Arbeit (den BASE-Tag-Parsing, falls vorhanden), Sie src und href-Attribute in URLs und verwenden Sie die HttpWebRequest HEAD-Anfragen für die Zielbilder schicken ihre Größe zu bestimmen. Das sollte Ihnen eine Vorstellung davon geben, wie grafisch intensive der Seite ist, wenn das etwas ist, der Sie interessiert. Weitere Artikel, die Sie interessieren könnten in Ihre Statistiken in einschließlich könnten Backlinks / Pagerank umfassen (via Google API), ob die Seite bestätigt als HTML oder XHTML , wie viele Prozent der Links Link zu URL in der gleichen Domäne im Vergleich zu off-Site, und wenn möglich, Google-Rankings für die Seite für verschiedene Suchzeichenfolgen (weiß nicht, ob das programmatisch verfügbar ist, obwohl).

würde ich ein Skript (oder eine kompilierte App auf der Sprache der Wahl abhängig) verwendet in einer Sprache geschrieben, die für die Vernetzung und Textanalyse / reguläre Ausdrücke starke Unterstützung hat.

  • Perl
  • Python
  • .NET-Sprache der Wahl
  • Java

, was Sprache, die Sie am bequemsten mit. Ein grundlegend Stand-alone-Skript / app hält Sie benötigen zu viel über Browser-Integration und Sicherheitsfragen zu kümmern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top