Domanda

Sento persone che scrivono questi programmi continuamente e so cosa fanno, ma come lo fanno effettivamente? Sto cercando concetti generali.

È stato utile?

Soluzione

Tecnicamente, lo screenshot è qualsiasi programma che acquisisce i dati di visualizzazione di un altro programma e li ingerisce per uso personale.

Molto spesso, lo screenscaping si riferisce a un client Web che analizza le pagine HTML del sito Web di destinazione per estrarre dati formattati. Questo viene fatto quando un sito Web non offre un feed RSS o un'API REST per accedere ai dati in modo programmatico.

Un esempio di una libreria utilizzata a questo scopo è Hpricot per Ruby, che è uno dei migliori parser HTML con architettura utilizzata per lo scraping dello schermo.

Altri suggerimenti

Molte risposte precise qui.

Quello che nessuno ha detto è non farlo!

La raschiatura dello schermo è ciò che fai quando nessuno ti ha fornito un'interfaccia leggibile da una macchina ragionevole. È difficile da scrivere e fragile.

Ad esempio, considera un aggregatore RSS, quindi considera il codice che ottiene le stesse informazioni lavorando attraverso una normale interfaccia blog orientata all'uomo. Quale si interrompe quando il blogger decide di cambiare il loro layout?

Certo, a volte non hai scelta :(

In generale uno screen-scraper è un programma che cattura l'output da un programma server imitando le azioni di una persona seduta di fronte alla workstation usando un browser o un programma di accesso al terminale. in alcuni punti chiave il programma interpreterebbe l'output e quindi intraprendere un'azione o estrarre determinate quantità di informazioni dall'output.

Inizialmente questo veniva fatto con output di caratteri / terminali da mainframe per l'estrazione di dati o l'aggiornamento di sistemi che erano arcaici o non direttamente accessibili all'utente finale. in termini moderni di solito significa analizzare l'output di una richiesta HTTP per estrarre dati o intraprendere altre azioni. con l'avvento dei servizi web questo genere di cose avrebbe dovuto scomparire, ma non tutte le app forniscono una bella API con cui interagire.

Un raschiatore scarica la pagina html ed estrae i dati interessati sia cercando token noti o analizzandoli come XML o alcuni di questi.

Agli albori dei PC, gli screen saver emulavano un terminale (ad esempio IBM 3270) e fingevano di essere un utente per estrarre in modo interattivo, aggiornare le informazioni sul mainframe. In tempi più recenti, il concetto viene applicato a qualsiasi applicazione che fornisce un'interfaccia tramite pagine Web.

Con l'emergere della SOA, lo screenshot è un modo conveniente per abilitare i servizi alle applicazioni che non lo sono. In questi casi, lo scraping delle pagine Web è l'approccio più comune adottato.

Ecco un po 'di scraping dello schermo implementato in Javascript , usando jQuery (non è una scelta comune, intendiamoci, poiché lo scraping è di solito un'attività client-server):

//Show My SO Reputation Score
var repval = $('span.reputation-score:first'); alert('StackOverflow User "' + repval.prev().attr('href').split('/').pop() + '" has (' + repval.html() + ') Reputation Points.');

Se esegui Firebug , copia il codice sopra e incollalo nella console e guardalo in azione proprio qui in questa pagina delle domande.

Se SO modifica la struttura del DOM / i nomi delle classi di elementi / le convenzioni del percorso URI, tutte le scommesse sono disattivate e potrebbe non funzionare più - questo è il solito rischio nelle operazioni di raschiatura dello schermo in cui non c'è contratto / comprensione tra le parti (il raschietto e lo scrapee [ sì, ho appena inventato una parola ]).

Tecnicamente, lo screenscraping è qualsiasi programma che acquisisce i dati di visualizzazione di un altro programma e li ingerisce per uso personale. Nei primi giorni del PC, gli screen saver emulavano un terminale (ad esempio IBM 3270) e fingevano di essere un utente in per estrarre interattivamente, aggiornare le informazioni sul mainframe. In tempi più recenti, il concetto viene applicato a qualsiasi applicazione che fornisce un'interfaccia tramite pagine Web.

Con l'emergere della SOA, lo screenshot è un modo conveniente per abilitare i servizi alle applicazioni che non lo sono. In questi casi, lo scraping delle pagine Web è l'approccio più comune adottato.

Molto spesso, lo screenscaping si riferisce a un client Web che analizza le pagine HTML del sito Web di destinazione per estrarre dati formattati. Questo viene fatto quando un sito Web non offre un feed RSS o un'API REST per accedere ai dati in modo programmatico.

In genere hai una pagina HTML che contiene alcuni dati desiderati. Quello che fai è scrivere un programma che recupererà quella pagina web e tenterà di estrarre quei dati. Questo può essere fatto con parser XML, ma per applicazioni semplici preferisco usare espressioni regolari per abbinare un punto specifico nell'HTML ed estrarre i dati necessari. A volte può essere difficile creare una buona espressione regolare, perché l'HTML circostante appare più volte nel documento. Devi sempre abbinare un oggetto unico il più vicino possibile ai dati di cui hai bisogno.

La raschiatura dello schermo è ciò che fai quando nessuno ti ha fornito un'interfaccia leggibile da una macchina ragionevole. È difficile da scrivere e fragile.

Ad esempio, considera un aggregatore RSS, quindi considera il codice che ottiene le stesse informazioni lavorando attraverso una normale interfaccia blog orientata all'uomo. Quale si interrompe quando il blogger decide di cambiare il loro layout.

Un esempio di una libreria utilizzata a questo scopo è Hpricot per Ruby, che è uno dei parser HTML meglio progettati per lo scraping dello schermo.

Hai una pagina HTML che contiene alcuni dati che desideri. Quello che fai è scrivere un programma che recupererà quella pagina web e tenterà di estrarre quei dati. Questo può essere fatto con parser XML, ma per applicazioni semplici preferisco usare espressioni regolari per abbinare un punto specifico nell'HTML ed estrarre i dati necessari. A volte può essere difficile creare una buona espressione regolare, perché l'HTML circostante appare più volte nel documento. Devi sempre abbinare un oggetto unico il più vicino possibile ai dati di cui hai bisogno.

  

La raschiatura dello schermo è ciò che fai quando nessuno ti ha fornito un'interfaccia leggibile da una macchina ragionevole. È difficile da scrivere e fragile.

Non del tutto vero. Non credo di esagerare quando dico che la maggior parte degli sviluppatori non ha abbastanza esperienza per scrivere API decenti. Ho lavorato con società di scraping dello schermo e spesso le API sono così problematiche (che vanno da errori criptici a cattivi risultati) e spesso non offrono la piena funzionalità che il sito Web offre che può essere meglio schermare lo scrap (scrap web se tu volontà). I portali extranet / siti Web sono utilizzati dai miei più clienti / broker rispetto ai client API e quindi sono supportati meglio. Nelle grandi aziende le modifiche ai portali extranet ecc. Sono poco frequenti, di solito perché originariamente erano esternalizzate e ora sono appena mantenute. Mi riferisco maggiormente allo scraping dello schermo in cui l'output è personalizzato, ad es. un volo su un determinato itinerario e orario, un preventivo assicurativo, un preventivo di spedizione ecc.

In termini di farlo, può essere semplice come un client Web estrarre il contenuto della pagina in una stringa e utilizzare una serie di espressioni regolari per estrarre le informazioni desiderate.

string pageContents = new WebClient("www.stackoverflow.com").DownloadString();
int numberOfPosts = // regex match

Ovviamente in un ambiente su larga scala dovresti scrivere codice più robusto di quanto sopra.

  

Un raschiatore scarica l'html   pagina ed estrae i dati   interessato sia alla ricerca   token noti o analizzandoli come XML o   alcuni di questi.

Questo è un approccio più pulito di regex ... in teoria .., tuttavia in pratica non è così facile, dato che la maggior parte dei documenti dovrà essere normalizzata in XHTML prima che tu possa XPath attraverso di essa, alla fine abbiamo trovato il fine tuning le espressioni regolari erano più pratiche.

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