Domanda

Vorrei scrivere del codice che analizza un sito web e dei suoi beni e crea un po ' di statistiche e report.Le attività includono immagini.Mi piacerebbe essere in grado di tracciare i collegamenti, o almeno tenta di identificare i menu della pagina.Mi piacerebbe anche indovinate un po ' cosa CMS creato il sito, sulla base di nomi di classe e simili.

Ho intenzione di assumere che il sito è ragionevolmente statico, o è guidato da un CMS, ma non è qualcosa di simile a una RIA.

Idee su come io possa progredire.

1) Caricare il sito in un iFrame.Questo sarebbe bello, perché ho potuto analizzare con jQuery.O avrei potuto?Sembra come mi piacerebbe essere ostacolato da cross-site scripting regole.Ho visto suggerimenti per ovviare a questi problemi, ma sto assumendo browser continuerà a reprimere queste cose.Sarebbe un bookmarklet aiutare?

2) Un add-on di Firefox.Questo mi permetteva di aggirare il cross-site scripting problemi, giusto?Sembra fattibile, perché gli strumenti di debug per Firefox e GreaseMonkey, per quella materia), ti consente di fare tutti i tipi di cose.

3) scaricate il sito sul lato server.Utilizzare le librerie sul server per analizzare.

4) YQL.Non è questo praticamente costruito per l'analisi di siti?

È stato utile?

Soluzione

Questo in realtà dipende la portata del progetto. Se è solo casuale, non è completamente automatizzato, avrei fortemente suggerisco un Firefox Addon.

Sono proprio nel bel mezzo del progetto simile. Si deve analizzare il DOM di una pagina generata utilizzando Javascript. Scrivendo un browser sul lato server era troppo difficile, così ci siamo rivolti ad alcuni altri tecnologie: Adobe AIR, Firefox Addons, userscripts, ecc

Fx addon è grande, se non è necessario l'automazione. Uno script può analizzare la pagina, è mostrare i risultati, vi chiedo di correggere le parti, che è incerto e, infine, inviare i dati ad alcuni back-end. Si ha accesso a tutti i DOM, in modo che non c'è bisogno di scrivere un / CSS / HTML / JS qualsiasi parser (che sarebbe inferno di un lavoro!)

Un altro modo è Adobe AIR. Qui, si ha un maggiore controllo sulla applicazione - è possibile avviare in background, facendo tutto il parsing e l'analisi, senza l'interazione dell'utente. Il rovescio della medaglia è - non si ha accesso a tutti DOM delle pagine. L'unico modo per andare passare questo è quello di istituire un semplice proxy, che recupera URL di destinazione, aggiunge un po 'di Javascript (per creare un-non attendibile di fiducia bridge sandbox) ... E' un hack sporco, ma funziona.

Modifica: In Adobe AIR, ci sono due modi per accedere DOM di un sito web straniero:

  • caricarla tramite Ajax, creare HTMLLoader, e alimentare la risposta in esso (metodo loadString IIRC)
  • Crea un iframe, e caricare il sito in sandbox non attendibile.

non mi ricordo perché, ma il primo metodo fallito per me, così ho dovuto usare l'altro (credo che ci fosse qualche motivi di sicurezza coinvolti, che non ho potuto aggirare). E ho dovuto creare una sandbox, al DOM del sito di accesso. Ecco un po 'di trattare con sandbox ponti . L'idea è quella di creare un proxy, che aggiunge un semplice JS, che crea childSandboxBridge ed espone alcuni metodi per il genitore (in questo caso: l'applicazione AIR). Il contenuto dello script è qualcosa di simile:

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

(fate attenzione - ci sono limiti di ciò che può essere passato attraverso il bridge sandbox -! Oggetti complessi di sicuro utilizzare esclusivamente i tipi primitivi)

Quindi, il proxy fondamentalmente manomesso tutte le richieste che hanno restituito HTML o XHTML. Tutti gli altri era appena passato attraverso invariato. Ho fatto questo utilizzando Apache + PHP, ma potrebbe essere fatto con un vero e proprio proxy con alcuni moduli personalizzati / plugins di sicuro. In questo modo ho avuto l'accesso al DOM di qualsiasi sito.

fine della modifica .

Il terzo modo che conosco, il modo più duro - istituire un ambiente simile a quelli su BrowserShots . Poi si sta utilizzando Firefox con l'automazione. Se avete un Mac OS X su un server, si potrebbe giocare con ActionScript, fare l'automazione per voi.

Quindi, per riassumere:

    lo script
  • PHP / server-side - è necessario implementare il proprio browser, il motore JS, parser CSS, ecc, ecc completamente sotto controllo e automatizzato invece
  • .
  • Firefox Addon - ha accesso a DOM e tutta roba. Richiede utente di operare (o almeno una sessione firefox aperta con una sorta di autoreload). Bella interfaccia per un utente per guidare l'intero processo.
  • Adobe AIR - richiede un computer desktop di lavoro, più difficile che la creazione di un addon Fx, ma più potente
  • .
  • del browser automatizzata - più di un problema di programmazione desktop che webdevelopment. Può essere impostato su un terminale di Linux senza ambiente grafico. Richiede maestro abilità di hacking. :)

Altri suggerimenti

Il mio suggerimento sarebbe:

a) Ha scelto un linguaggio di scripting. Suggerisco Perl o Python:. Anche ricciolo + bash, ma male non la gestione delle eccezioni

b) caricare la home page tramite uno script, utilizzando un pitone o una libreria perl. Provare Perl WWW :: Mechanize modulo.

Python ha un sacco di moduli built-in, provare un'occhiata anche a www.feedparser.org

c) Controllare l'intestazione del server (tramite il comando HEAD HTTP) per trovare il nome del server di applicazione. Se siete fortunati troverete anche il nome CMS (diametro interno WordPress, ecc).

d) Utilizzare Google API XML di chiedere qualcosa come "link: sitedomain.com" per scoprire link che puntano al sito: ancora una volta si trovano esempi di codice per Python sulla home page di Google. chiedendo anche ranking di Google del dominio può essere utile.

e) È possibile raccogliere i dati in un db SQLite, quindi post-elaborazione in Excel.

Si dovrebbe semplicemente prendere la fonte (XHTML / HTML) e analizzarlo. Si può fare che in quasi qualsiasi linguaggio di programmazione moderno. Dal proprio computer connesso a Internet.

iframe è un widget per visualizzare il contenuto HTML, non è una tecnologia per l'analisi dei dati. È possibile analizzare i dati senza visualizzare ovunque. Non hai nemmeno bisogno di un browser.

Strumenti a linguaggi come Python, Java, PHP sono certamente più potente per le attività di JavaScript o qualsiasi altra cosa che avete in queste estensioni di Firefox.

Inoltre, non importa ciò che la tecnologia è dietro il sito. XHTML / HTML è solo una stringa di caratteri, non importa quanto un browser lo visualizza. Per la ricerca di un "attività", si deve semplicemente cercare specifici tag HTML come "img", "oggetto", ecc.

Credo che una scrittura un'estensione Firebug sarebbe proabably essere uno dei modo più semplice per fare con. Per esempio YSlow è stato sviluppato in cima Firebug e fornisce alcune delle caratteristiche che stai cercando per (ad esempio immagini, CSS e JavaScript sommari).

Vi suggerisco di provare l'opzione # 4 prima (YQL): Il motivo è che sembra che questo potrebbe ottenere tutti i dati necessari e si potrebbe quindi costruire il vostro strumento come un sito web o come dove si poteva ottenere informazioni su un sito senza la necessità di andare alla pagina nel browser. Se YQL funziona per quello che ti serve, allora sembra che si avrebbe la massima flessibilità con questa opzione.

Se YQL non pan, allora vi consiglio di andare con l'opzione # 2 (un addon per Firefox).

Credo che si dovrebbe probabilmente cercare e stare lontano da Opzione # 1 (l'Iframe) a causa dei problemi cross-site scripting che già sono a conoscenza.

Inoltre, ho usato l'opzione # 3 (Afferra il sito sul lato server) e un problema che ho incontrato in passato è il sito accontentandosi di carico afferrato dopo il fatto utilizzando chiamate AJAX. Al momento non ho trovato un buon modo per afferrare l'intero contenuto di pagine che utilizzano AJAX - SO diffidare di tale ostacolo! Altre persone qui hanno funzionato in quella anche, vedere questo: Raschiare un sito web dinamico

LA DINAMICA AJAX CONTENUTO DI EMISSIONE: Ci possono essere alcune soluzioni al problema ajax, come l'utilizzo di AJAX stesso per afferrare il contenuto e utilizzando le evalScripts: vero parametro. Vedere i seguenti articoli per maggiori informazioni e un problema che potrebbe essere necessario essere a conoscenza di con come javascript valutata dal contenuto che viene afferrato opere:

libreria Prototype: http://www.prototypejs.org/api/ajax/updater

Messaggio: http: //www.crackajax. net / forum / index.php? action = vthread & forum topic = 3 & = 17

Oppure, se siete disposti a spendere soldi, dare un'occhiata a questo: http://aptana.com/jaxer/guide/develop_sandbox.html

Ecco un esempio brutto (ma forse utile) di utilizzare un componente .NET chiamato WebRobot di rottami contenuti da un sito dinamico AJAX abilitato come Digg.com. http://www.vbdotnetheaven.com/UploadFile/fsjr/ajaxwebscraping09072006000229AM/ajaxwebscraping. aspx

Anche qui è un articolo generale sull'uso di PHP e la biblioteca Curl a scartare tutti i link da una pagina web. Tuttavia, non sono sicuro se questo articolo e la biblioteca Curl copre la questione dei contenuti AJAX: http://www.merchantos.com/makebeta/php/scraping -links-con-php /

Una cosa che ho pensato di che potrebbe funzionare è:

  1. afferrare il contenuto e valutare utilizzando AJAX.
  2. invia il contenuto al server.
  3. valutare la pagina, link, ecc ..
  4. [FACOLTATIVO] salvare il contenuto come una pagina locale sul server.
  5. restituire informazioni statistiche tornare alla pagina.
  6. [FACOLTATIVO] visualizzazione in cache versione locale con evidenziazione.

^. Nota: se il salvataggio di una versione locale, si vuole utilizzare le espressioni regolari per convertire i percorsi di collegamento relativi (per le immagini in particolare) di essere corretto

In bocca al lupo! Appena si prega di essere a conoscenza del problema AJAX. Molti siti oggi caricare il contenuto dinamicamente utilizzando AJAX. Digg.com fa, MSN.com lo fa per il suo feed di notizie, ecc ...

Essendo principalmente un programmatore .Net in questi giorni, il mio consiglio sarebbe quello di utilizzare C # o qualche altra lingua con attacchi .Net. Utilizzare il controllo per caricare la pagina , e poi scorrere gli elementi nel documento (tramite GetElementsByTagName () ) per ottenere link, immagini, ecc Con un po 'di lavoro in più (l'analisi del tag BASE, se disponibile), è possibile risolvere src e attributi href nella URL e utilizzare il HttpWebRequest inviare richieste testa per le immagini di destinazione per determinare le loro dimensioni. Che dovrebbe darvi un'idea di come grafica intensiva la pagina è, se questo è qualcosa che ti interessa. Ulteriori elementi si potrebbe essere interessati a inclusi nelle statistiche potrebbe includere ritroso / pagerank (tramite Google API), se la pagina convalida come HTML o XHTML , qual è la percentuale dei collegamenti collegamento all'URL di nello stesso dominio contro off-site, e, se possibili, le classifiche di Google per la pagina per varie stringhe di ricerca (so se questo è di programmazione disponibili, però).

Vorrei utilizzare uno script (o un app compilata a seconda della lingua scelta) scritti in una lingua che ha un forte sostegno per la creazione di reti e di analisi del testo/espressioni regolari.

  • Perl
  • Python
  • .NET lingua a scelta
  • Java

qualunque sia la lingua che si sta più bene con.Una base stand alone script/app mantiene la necessità di preoccuparsi troppo per l'integrazione del browser e problemi di sicurezza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top