Cosa devo considerare quando raschio il contenuto da 6k + siti web?

-1

Sto lavorando a un progetto che analizzerà i dati da circa 6.000 siti web. Sto considerando l'utilizzo di un modello server / client in cui il server è responsabile per raschiare i dati e importarli in un database mentre il client accede ai dati.

Per analizzare i dati, sto prendendo in considerazione l'utilizzo di un parser html come HtmlAgilityPack in cui otterrò individualmente il percorso x dei dati che voglio scartare per sito web. (Questo è un compito doloroso, qualsiasi suggerimento migliore è benvenuto) Questi siti non forniscono API, ma alcuni forniscono feed RSS per i dati che voglio analizzare.

Il "server" raccoglierà i dati da tutti i siti in un intervallo prestabilito (ad es. minuti, ore) La mia domanda ora è che cosa dovrei considerare nel portare a termine questa attività a livello di programmazione?

  • Dal mio approccio per ottenere il xpath dei dati da ciascun sito Web; Probabilmente finirò per dover creare una classe / funzione per ogni sito web. Quali sono le mie alternative?
  • Come posso migliorare le prestazioni del mio programma perché ottenere i dati in modo tempestivo è chiave come nell'uso di tecniche multi-threading, programmazione asincrona, utilizzo della memoria, ecc.
  • Quando i dati vengono raschiati e prima che vengano importati, verrà controllato per vedere se esiste nel database. Esiste un modo "migliore" invece di eseguire una query SQL per passare in rassegna ogni nodo restituito da xpath per vedere se esiste?
  • Questo progetto verrà scritto in C #, tuttavia sono aperto ad altre lingue quando si tratta del "server". Probabilmente Python?
  • Una volta completato, idealmente avrò bisogno di un servizio di hosting per eseguire questo programma. Che cosa dovrei prendere in considerazione in proposito?

Conclusione: sto chiedendo le corrette tecniche di programmazione per realizzare questo progetto.

    
posta NuWin 05.06.2016 - 00:09
fonte

1 risposta

1

Se stavo costruendo un sistema come questo da zero, userei Akka.Net per costruire una rete di agenti per fare lo scraping. Akka.Net ti permetterà di lanciare il maggior numero di macchine di cui hai bisogno al problema, senza re-architettare la tua applicazione. Usi le stesse tecniche che useresti in qualsiasi altro programma per migliorare le sue prestazioni, ma Akka ti alleggerirà della maggior parte del dolore da concorrenza.

Hai bisogno di una classe per raschietto; ogni sito web è diverso. Calcola tutto ciò che è comune a tutti gli scraper nella sua classe.

Dovresti creare un DTO (Data Transfer Object) per ogni sito, se i dati che stai restituendo differiscono per ogni sito, o un unico DTO universale per tutti i siti. Ogni raschietto deve accettare tutti i parametri necessari per eseguire una ricerca su un determinato sito, raschiare qualsiasi pagina richiesta e restituire il DTO risultante. È quindi possibile salvare tale DTO nel database a proprio piacimento.

Una volta acquisita esperienza con HTML Agility Pack, scoprirai che ti affidi meno su diversi XPath e più su uno o due Xpath che ti faranno entrare nell'area di gioco, con chiamate SelectAllNodes() o SelectSingleNode() successive con un semplice selettore come tr per farti il resto. Qualsiasi cosa facciate, non memorizzare gli XPath in un database o in un file di configurazione; basta scriverli direttamente nella classe raschietto.

Dovresti capire come pianificare gli scraper in modo da poter spaziare le richieste dirette allo stesso sito ad un minuto di distanza.

Il tuo problema di hosting è irrilevante. Hai bisogno di un host per la tua pagina cliente; gli scraper hanno solo bisogno di una connessione Internet. Siate pronti ad affrontare cose come captcha, proxy e simili. La maggior parte dei siti Web non è ben scritta.

Infine, un consiglio: assicurati che il tuo modello di business sia sostenibile. La maggior parte dei siti Web non accetta la copia all'ingrosso del proprio sito Web o dell'archivio dati, indipendentemente da come lo si acquisisce. Sarà meglio per te se il tuo modello di business richiede solo bit di informazioni da ogni sito, e non il tutto.

    
risposta data 05.06.2016 - 00:34
fonte

Leggi altre domande sui tag