2015-11-29 24 views
5

Sto facendo un po 'di scraping web, realizzato con Selenium (quindi l'uso di questa non è la domanda). Quando devo identificare un elemento (es: per ottenere un attributo src) dovrei usare il motore di selezione interno Selenium o dovrei usare Jsoup (che è molto più semplice). Quindi la questione è: l'uso di Jsoup è così notevole? Dovrei usare il selenio il più spesso possibile? GrazieSelenium vs performance Jsoup

risposta

7

Se il DOM è già stato analizzato in JSoup, ti consigliamo di utilizzare JSoup. È molto più veloce del selenio, dal momento che non ha bisogno di preoccuparsi di un DOM "vivo". Il selenio deve sempre verificare se gli handle degli elementi sono ancora validi prima di eseguire qualsiasi operazione con essi.

Se è possibile, evitare del tutto il selenio, poiché il suo sovraccarico è davvero notevole quando si fanno grossi graffi. Il selenio brilla tuttavia, se il contenuto è generato dinamicamente da JavaScript nel client. JSoup non può gestirlo affatto, dal momento che non esegue JavaScript.

Addendum per rispondere commento

Risposta breve: Dipende!

più lunga: Se il sito che si sta raschiando è generato da Javascript e non cambia dopo generazione, è perfettamente bene per accedervi con il selenio, in particolare, se il DOM è complessa e ci sarebbe voluto molto per leggere in JSoup , anche se JSoup è abbastanza veloce. Tuttavia, JSoup genererà nuovamente il DOM in memoria, quindi se il tuo DOM è enorme, non solo lo avrai in un modo che consuma memoria nel selenio, ma anche in JSoup. Questo può o non può essere un problema nel tuo caso, ma vale la pena tenerlo a mente.

Dalla mia esperienza personale vorrei uccidere il processo di selenio il più presto possibile dopo aver ottenuto l'HTML finale e analizzarlo nuovamente in JSoup, poiché è come dici tu: lo scraping di Jsoup è molto più semplice dei costrutti selettori del selenio corrispondenti, specialmente se sei sicuro che eventuali modifiche nel DOM dopo la creazione iniziale sono irrilevanti per il tuo scraping.

+2

Ho bisogno del selenio a causa del contenuto generato dinamicamente da Javascript. La mia domanda era questa: dopo aver analizzato la pagina con selenio e aver ottenuto la pagina, dovrei analizzare e ottenere elementi con selenio o creare un oggetto documento per Jsoup? Grazie per la risposta! – Fxxxx

+0

Sto pensando di utilizzare qualcosa del genere ** Document doc = Jsoup.parse (webDriver.getPageSource()); **. Ho a che fare con alcuni problemi di perfomance che si sovrappongono a _Selenium WebElements_, hai implementato una soluzione simile? Ha risolto i tuoi problemi di prestazioni? – Hoper

+0

@Hoper Di nuovo, dipende. L'analisi efficace di HTML due volte comporta un sovraccarico. Potrebbe ancora valere la pena, se il loop sul Selenium WebElements è esteso. Soprattutto, se il DOM cambia durante il loop su WebElements, si incontrano rapidamente problemi di temporizzazione. Dal momento che non è molto difficile programmare entrambe le varianti, forse dovresti solo misurare i risultati e andare con la soluzione più veloce – luksch