Andare oltre la prima pagina JSoup

di il
8 risposte

Andare oltre la prima pagina JSoup

Ciao ragazzi, da ieri mi è capitato di dover usare JSoup per un progetto. Ho bisogno di ottenere titolo, url e snippet per ogni risultato di una determinata query in DuckDuckGo. Fino a qui è tutto ok, il problema è che ho bisogno di risultati che vadano oltre la prima pagina, e non riesco proprio a capire come ottenerli. Qualcuno saprebbe aiutarmi? Grazie!

8 Risposte

  • Re: Andare oltre la prima pagina JSoup

    jacopHack ha scritto:


    Ciao ragazzi, da ieri mi è capitato di dover usare JSoup per un progetto. Ho bisogno di ottenere titolo, url e snippet per ogni risultato di una determinata query in DuckDuckGo. Fino a qui è tutto ok, il problema è che ho bisogno di risultati che vadano oltre la prima pagina, e non riesco proprio a capire come ottenerli. Qualcuno saprebbe aiutarmi? Grazie!
    Dal Document che ottieni devi andare tu a trovare gli elementi/attributi/testi che ti interessano. Se vai a cercare degli url ad esempio negli <a href=" .... "> allora con il url potrai fare una ulteriore richiesta (occhio che gli url possono essere relativi).

    Puoi vedere un (mio) esempio d'uso di JSoup in questa discussione.
  • Re: Andare oltre la prima pagina JSoup

    Perdonami ma non ho ben capito.
    Io ottengo il codice del risultato di pagina con "Document doc = Jsoup.connect(DUCKDUCKGO_SEARCH_URL + query).get();"
    Il problema appunto è che si ferma alla prima pagina. Sapresti farmi un esempio di come accedere alle pagine successive?
  • Re: Andare oltre la prima pagina JSoup

    jacopHack ha scritto:


    Perdonami ma non ho ben capito.
    Io ottengo il codice del risultato di pagina con "Document doc = Jsoup.connect(DUCKDUCKGO_SEARCH_URL + query).get();"
    Il problema appunto è che si ferma alla prima pagina. Sapresti farmi un esempio di come accedere alle pagine successive?
    Innanzitutto devi sapere tu cosa cercare. Dato che le pagine a cui vuoi accedere non sono "tue" (o comunque sotto il tuo controllo), allora PRIMA di scrivere del codice devi fare una analisi delle pagine. Quindi con un browser "reale" (es. Firefox) "naviga" in quelle pagine (come dovrà poi fare programmaticamente il codice Java) e per ciascuna pagina leggi il sorgente HTML ed analizzalo. Verifica gli elementi/attributi che ti interessano, guarda dove si trovano annidati, quali id e classi hanno, ecc.. ... insomma, devi scoprire come è la struttura della pagina.

    A quel punto potrai poi fare in modo che il tuo codice faccia una cosa del tipo (puro esempio): dal Document trovami tutti gli Element <a> che hanno classe "pincopalla" e che si trovano a qualunque livello sotto il <div> con id "qualcosa".

    Ma per arrivare a questo devi capire come è strutturata la pagina!
  • Re: Andare oltre la prima pagina JSoup

    Perdonami non voglio sembrare insistente. Ma solo con la prima riga di codice che ti ho scritto sopra io ottengo l'intero codice HTML della pagina. A me serve di ottenerlo anche delle pagine successivve ma duckduckgo non è "diviso" in pagine, si autocarica con lo scorrimento verso il basso, perciò io non so come raggiungerle. Capisco il tuo discorso ma penso stiamo parlando di due cose differenti. La mia unica richiesta è quella di trovare un modo di ottenere il codice html delle pagine successive.
  • Re: Andare oltre la prima pagina JSoup

    jacopHack ha scritto:


    ma duckduckgo non è "diviso" in pagine, si autocarica con lo scorrimento verso il basso, perciò io non so come raggiungerle.
    Se la pagina fa uso di Javascript, framework basati su Javascript, chiamate asincrone Ajax per aggiornare "dinamicamente" la pagina ..... allora le cose si COMPLICANO (e potenzialmente molto). Non vuol dire che siano per certo "impossibili" ma richiedono molto più studio su cosa succede nella pagina. Visto che, ripeto, non sono sotto il tuo controllo.

    jacopHack ha scritto:


    Capisco il tuo discorso ma penso stiamo parlando di due cose differenti. La mia unica richiesta è quella di trovare un modo di ottenere il codice html delle pagine successive.
    Ascolta: dimentica per un attimo Java, JSoup ecc..
    Hai "capito" (con un normale browser e con eventualmente l'uso dei suoi "developer tools", es. Firebug per Firefox) COSA "succede" nella pagina? Da dove arrivano i link alle altre pagine? Viene fatto uso di chiamate Ajax? Ci sono blocchi di codice HTML nella pagina che "appaiono" a seguito di codice Javascript che modifica il DOM della pagina?
    Tutto questo, ripeto, lo devi scoprire TU. L'hai fatto?
  • Re: Andare oltre la prima pagina JSoup

    Esattamente come dici tu ci sono chiamate di funzioni scritte in javascript/ajax che modificano il DOM della pagina. Tanto è vero che se faccio visualizza sorgente pagina, non viene mostrato tutta la reale sorgente. JSoup però mi aveva comunque dato una mano ad ottenere link titoli e snippet che manualmente tramite browser non avrei potuto avere. Pensavo appunto potesse essere di aiuto anche in quest'altro caso, ma mi ritrovo completamente disorientato in mezzo a tutto questo nuovo mondo mai esplorato.
  • Re: Andare oltre la prima pagina JSoup

    jacopHack ha scritto:


    Esattamente come dici tu ci sono chiamate di funzioni scritte in javascript/ajax che modificano il DOM della pagina. Tanto è vero che se faccio visualizza sorgente pagina, non viene mostrato tutta la reale sorgente. JSoup però mi aveva comunque dato una mano ad ottenere link titoli e snippet che manualmente tramite browser non avrei potuto avere. Pensavo appunto potesse essere di aiuto anche in quest'altro caso, ma mi ritrovo completamente disorientato in mezzo a tutto questo nuovo mondo mai esplorato.
    JSoup purtroppo ti aiuta solo in certi casi. JSoup NON esegue Javascript e non ha minimamente le stesse potenzialità degli avanzati browser "moderni" che supportano tutti i più recenti standard HTML/CSS/Javascript!
    JSoup è solo un parser HTML che ti permette di estrarre informazioni dal modello ad oggetti della pagina.

    Quindi ribadisco che se ci sono di mezzo Javascript, chiamate asincrone, ecc... le cose si complicano. E spetta a te analizzare MEGLIO le interazioni nella pagina perché dovrai "bypassare" molte cose andando tu a fare quelle richieste, sapendo a priori come sono, e non necessariamente solo con JSoup.

    Se provi da browser reale una pagina di tuo interesse di quel sito e la pagina fa richieste asincrone magari mentre scorri o muovi il mouse, allora devi analizzare tu queste richieste. Tanto per dirne alcune: hai tracciato queste richieste con i developer tools del browser? Hai verificato il formato degli url? Ci sono ripetizioni che noti tra le richieste? Vengono passati "id" di qualche tipo? Vengono rimandati al server dei "cookie" che probabilmente servono tipicamente per "tenere su" una sessione?
    La response di queste richieste asincrone cosa contiene? Contiene pezzi puri di HTML? O "dati" strutturati (XML o JSON tipicamente)? Se sono dati come e dove si "riflettono" poi nella pagina?
    Se arrivi a comprendere questo, riesci ad eseguire tu queste richieste "a mano" usando tools come ad esempio Postman (estensione di Chrome) o altro? Perché se non riesci a farle a mano .... non le fai neanche programmaticamente da codice!

    Insomma si tratta di analizzare il comportamento di un sito che non è fatto da te e non è sotto il tuo controllo. E questo, ripeto, spetta a TE. Se tutto questo ti sembra strano o complesso o poco utile .... sì E' COMPLESSO e richiede un po' di tempo ed impegno.
    Forse quello che pensavi di fare non si può fare ... o più probabilmente si può fare ma va oltre alle tue attuali conoscenze. In tal caso basta solo .... studiare.
  • Re: Andare oltre la prima pagina JSoup

    Capito, purtroppo il tempo non c'è per studiarmi tutte queste cose. Cercherò di trovare una via più semplice. Grazie comunque del supporto e della disponibilità
Devi accedere o registrarti per scrivere nel forum
8 risposte