Salvare automaticamente pagine web

di il
40 risposte

40 Risposte - Pagina 3

  • Re: Salvare automaticamente pagine web

    fifififi ha scritto:


    Ho installato firebug, ma non mi sembra comodo, mi avevano fatto installare notpad++ adesso lo reinstallo.
    Da un browser es. Firefox puoi anche usare l'opzione "View Page Source". La pagina delle discussioni qui su iprogrammatori.it è ancora abbastanza leggibile anche come sorgente diretto, essendo abbastanza ben indentato. Purtroppo ci sono altri siti dove il html è decisamente meno leggibile direttamente.

    Firebug non è comodo? Apri Firebug, poi usa la seconda icona, quella con la freccia che è a fianco della icona con l'insetto, poi clicca su un elemento della pagina che stai analizzando. Firebug ti porta subito al tag di quel elemento nell'albero dei tag.

    fifififi ha scritto:


    Ma per curiosità, come fai a sapere tutte queste cose?
    Ehm ... non ho iniziato qualche mesetto fa a programmare ....

    fifififi ha scritto:


    Poi non capisco il for
    for (Element bloccoArgomento : blocchiArgomenti) {
    }
    È il "enhanced-for" (o più amichevolmente il "for-each") di Java 5. E in teoria con "sono due anni che uso java" dovresti già conoscerlo.

    fifififi ha scritto:


    ho scaricato sia firebug che notepad ma sinceramente mi sembra comodo anche visualizza sorgente pagina, ho impressione non cambi tanto...
    Prova magari anche i developer tools di Chrome. Anche quelli non sono male.
  • Re: Salvare automaticamente pagine web

    Ok, siccome non capisco praticamente nulla voglio provare con un altro metodo.

    perché da errore alla terzultima riga?
        public static void main(String[] args) throws IOException {
    
            File file = new File("percorso");
            FileWriter scrivi = new FileWriter(file);
            if (file.exists()) {
                file.delete();
            }
            file.createNewFile();
            scrivi.write(Jsoup.connect("http://www.iprogrammatori.it/"));
            scrivi.flush();
            scrivi.close();
        }
  • Re: Salvare automaticamente pagine web

    fifififi ha scritto:


            scrivi.write(Jsoup.connect("http://www.iprogrammatori.it/"));
    Questo non ha assolutamente senso. connect() restituisce un oggetto Connection e FileWriter non ha ovviamente un write(Connection).
    FileWriter non ha nemmeno un write(Object). Se ce l'avesse, scriveresti il risultato del toString() invocato sul Connection, che sarebbe del tutto insignificante, perché sarebbe un qualcosa tipo "org.jsoup.helper.HttpConnection@555590".

    Scusa ma stai andando a casaccio? Stai tentando la fortuna?

    Mi spiace, ma viste queste "basi", è pure difficile aiutarti.
  • Re: Salvare automaticamente pagine web

    Non fa nulla lascierò perdere, grazie.
  • Re: Salvare automaticamente pagine web

    fifififi ha scritto:


    non fa nulla lascierò perdere, grazie.
    Il mio intervento di prima, non era ovviamente per demoralizzarti .. ci mancherebbe. Ma capisci che se metti il risultato di un connect() dentro un write, senza sapere cosa è l'oggetto restituito da connect() e senza sapere che non avrebbe senso sia tecnicamente (non compila) sia concettualmente anche ammesso ipoteticamente che esistesse un write(Object), qualche problematica evidentemente esiste.

    A questo punto non ti dico di lasciar perdere ma magari di sforzarti un pochino di più nel cercare di capire la filosofia delle cose nell'uso di JSoup e di HTML/CSS (e di Java in generale).
    Mi vengono in mente queste domande:

    a) Potrebbe esserti utile una spiegazione su cosa sono e rappresentano le varie classi di JSoup (Element, Node, ecc...)?
    b) Potrebbe esserti utile un esempio di codice che ti mostra la correlazione tra un HTML e il modello ad oggetti (DOM) offerto da JSoup?
  • Re: Salvare automaticamente pagine web

    Perché se faccio così lo stampa giusto
    System.out.println(Jsoup.connect("link").get());
    ma se faccio così
    Document doc = (Document) Jsoup.connect("link").get();
    System.out.println(doc);

    no?

    andbin ha scritto:


    a) Potrebbe esserti utile una spiegazione su cosa sono e rappresentano le varie classi di JSoup (Element, Node, ecc...)?
    b) Potrebbe esserti utile un esempio di codice che ti mostra la correlazione tra un HTML e il modello ad oggetti (DOM) offerto da JSoup?
    boh proviamo.

    però così ho visto che funziona
    org.jsoup.nodes.Document doc = Jsoup.connect("link").get();
    System.out.println(doc);
  • Re: Salvare automaticamente pagine web

    fifififi ha scritto:


    perché se faccio così lo stampa giusto
    System.out.println(Jsoup.connect("https://it.answers.yahoo.com/question/index?qid=20160311062015AAjh2rA").get());
    ma se faccio così
    Document doc = (Document) Jsoup.connect("https://it.answers.yahoo.com/question/index?qid=20160311062015AAjh2rA").get();
    System.out.println(doc);

    no?
    Dipende quale Document hai importato. Se hai fatto:

    import org.jsoup.nodes.Document;

    I due modi di print sono UGUALI.

    fifififi ha scritto:


    però così ho visto che funziona
    org.jsoup.nodes.Document doc = Jsoup.connect("https://it.answers.yahoo.com/question/index?qid=20160311062015AAjh2rA").get();
    System.out.println(doc);
    Comunque "stampare" il Document fa invocare il toString() sul Document. E da quanto so il toString() crea una stringa ricostruendo il HTML dal DOM che ha in memoria.
    Non è il massimo come efficienza e probabilmente non è esattamente carattere x carattere uguale alla pagina originale.

    Se vuoi scaricare una pagina HTML pari pari, esattamente così come è, ci sono altri modi.
  • Re: Salvare automaticamente pagine web

    andbin ha scritto:


    Se vuoi scaricare una pagina HTML pari pari, esattamente così come è, ci sono altri modi.
    Sì, grazie sarebbe utile.
  • Re: Salvare automaticamente pagine web

    fifififi ha scritto:


    andbin ha scritto:


    Se vuoi scaricare una pagina HTML pari pari, esattamente così come è, ci sono altri modi.
    Sì, grazie sarebbe utile.
    A livello basilare, tramite la API di networking del framework presente nel package java.net: classi URL, URLConnection ecc...
    C'è il tutorial Oracle: Lesson: Working with URLs.

    Altrimenti ci sono librerie esterne apposite, ad esempio la Apache Commons IO ha la classe FileUtils con 2 metodi copyURLToFile.
  • Re: Salvare automaticamente pagine web

    Grazie, adesso ho un problema: salvo la pagina in html, ma succede un fatto io punto il mouse su una determinata cosa e nella pagina online mi appare una schedina con delle informazioni, mentre in quella offline la schedina è tutta vuota. Vorrei poter salvare anche la schedina... come si fa?
  • Re: Salvare automaticamente pagine web

    fifififi ha scritto:


    grazie, adesso ho un problema: salvo la pagina in html, ma succede un fatto io punto il mouse su una determinata cosa e nella pagina online mi appare una schedina con delle informazioni, mentre in quella offline la schedina è tutta vuota. Vorrei poter salvare anche la schedina... come si fa?
    Chiaramente in questo momento non ho idea bene di quale "schedina" e di quale sito/pagina parli (forse hai detto qualcosa a riguardo all'inizio della discussione ma non sono andato a vedere).

    In generale devi analizzare tu cosa succede. Devi innanzitutto usare un browser nello scenario reale ed utilizzare i suoi "developer tools", per tracciare tutte le chiamate, ispezionare i sorgenti, vedere da dove/come arrivano i dati di quella "schedina", verificare se in tutto questo c'è del codice Javascript coinvolto e magari pure se ci sono di mezzo richieste HTTP fatte con tecniche AJAX.

    Insomma, devi capire tu cosa succede tra il browser e il server. Mi spiace ma NON ho (e non c'è) una risposta più "bella" o più "semplice". È così ... non c'è una soluzione generale, ogni sito è fatto a modo suo e quindi se vuoi gestirlo "programmaticamente" devi prima capire come funziona sotto sotto.

    E una volta che hai capito le interazioni tra browser e server e proporzionalmente alla complessità e poi anche alle potenzialità di jsoup (che in realtà non le conosco tutte nemmeno io), puoi sperimentare delle soluzioni apposite.
    E chiaramente se il sito dovesse un giorno cambiare molto il comportamento e/o struttura .... dovrai rivalutare tutto!
Devi accedere o registrarti per scrivere nel forum
40 risposte