2016-01-19 22 views
7

Voglio ottenere il contenuto di una pagina ed estrarre le parti specifiche di esso. Per quanto ne so ci sono almeno due soluzioni per tale compito: Crawler4j e Jsoup.Crawler4j vs. Jsoup per le pagine che scorrono e analizzano in Java

Entrambi sono in grado di recuperare il contenuto di una pagina e di estrarne sub-parti. L'unica cosa che non capisco qual è la differenza tra loro? C'è un similar question, che è contrassegnata come risposta:

Crawler4j è un cingolato, Jsoup è un parser.

Ma ho appena controllato, Jsoup 1.8.3 è anche in grado di scansione di una pagina, oltre a una funzionalità di analisi, mentre Crawler4j è in grado non solo strisciare la pagina, ma l'analisi del suo contenuto.

Quindi, si può, per favore, chiarire la differenza tra Crawler4j e Jsoup?

risposta

20

La scansione è qualcosa di più grande del semplice recupero del contenuto di un singolo URI. Se si desidera semplicemente recuperare il contenuto di alcune pagine, non vi è alcun reale beneficio dall'usare qualcosa come Crawler4J.

Diamo un'occhiata a un esempio. Supponi di voler eseguire la scansione di un sito Web. I requisiti sarebbero:

  1. di base Dare URI (home page)
  2. Prendi tutti i URI da ogni pagina e recuperare il contenuto di quelli troppo.
  3. Spostare in modo ricorsivo per ogni URI che si recupera.
  4. Recupera il contenuto solo degli URI che si trovano all'interno di questo sito Web (potrebbero esserci URI esterni che fanno riferimento a un altro sito Web, non ne abbiamo bisogno).
  5. Evitare la scansione circolare. La pagina A ha URI per la pagina B (dello stesso sito). La pagina B ha l'URI per la pagina A, ma abbiamo già recuperato il contenuto della pagina A (la pagina ha un collegamento per la pagina Home, ma abbiamo già ottenuto il contenuto della pagina Home quindi non visitarlo più).
  6. L'operazione di ricerca per indicizzazione deve essere multithreading
  7. Il sito Web è vasto. Contiene molte pagine. Vogliamo solo recuperare 50 URI a partire dalla pagina Home.

Questo è uno scenario semplice. Prova a risolverlo con Jsoup. Tutte queste funzionalità devono essere implementate da te. Crawler4J o qualsiasi microstruttura per crawler di questo tipo, dovrebbe o dovrebbe avere un'implementazione per le azioni precedenti. Le qualità forti di Jsoup brillano quando si decide cosa fare con il contenuto.

Diamo un'occhiata ad alcuni requisiti per l'analisi.

  1. ottenere tutti i paragrafi di una pagina
  2. Prendi tutte le immagini
  3. rimuovere i tag non validi (tag che non rispettano completamente le HTML specifiche)
  4. tag Rimuovere di script

Questo è dove Jsoup viene a giocare. Certo, c'è qualche sovrapposizione qui. Alcune cose potrebbero essere possibili con entrambi Crawler4J o Jsoup, ma questo non li rende equivalenti. È possibile rimuovere il meccanismo di recupero del contenuto da Jsoup e rimanere uno strumento straordinario da utilizzare. Se Crawler4J rimuoverebbe il recupero, perderebbe metà della sua funzionalità.

Ho utilizzato entrambi nello stesso progetto in uno scenario reale. Ho sottoposto a scansione un sito sfruttando i punti di forza di Crawler4J per tutti i problemi menzionati nel primo esempio. Poi ho passato il contenuto di ogni pagina che ho recuperato a Jsoup, al fine di estrarre le informazioni di cui avevo bisogno. Potrei non aver usato l'uno o l'altro? Sì, potrei, ma avrei dovuto implementare tutte le funzionalità mancanti.

Quindi la differenza, Crawler4J è un crawler con alcune semplici operazioni di analisi (è possibile estrarre le immagini in una riga), ma non c'è implementazione per le query complesse CSS. Jsoup è un parser che fornisce una semplice API per le richieste HTTP. Per qualcosa di più complesso non c'è implementazione.