Pagina 3 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 31

Discussione: Parsing pagina web

  1. #21
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    23
    Ho messo sb.delete (0,sb.length()); (sb è lo stringbuffer) dopo la stampa a video del codice html scaricato, e non mi ripete più le stesse pagine, però rimane il problema che non mi scarica tutte le pagine ma solo alcune, più precisamente quelle contenute in Url [1], 3, 5, 7 e 9.

    A ogni ciclo salta un sito, ma non riesco a capire il perchè!!

    Il codice è uguale a quello di ieri con l'aggiunta che ho detto all'inizio.

    Altra domanda:

    questo è il codice

    codice:
    class Riempi{
     String [] Url = new String [10];
      
     public String [] riempiArray(){
     try {
            String str="";
            int i=0;
            BufferedReader in = new BufferedReader(new FileReader(".txt"));
            while (in.readLine()!= null) {
                str = in.readLine();
                Url[i]=str;
                i++;
            }
            in.close();
            return Url;
            }
            catch (IOException e) {
            }
    }
    Il metodo ritorna un array caricato con le righe del file di testo, solo che il buon NetBeans a fianco alla firma del metodo mi indica "missing return statment".
    Il return è un array, il tipo in firma è un array..perchè dice così???

    Ringrazio ancora

  2. #22
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Cyocjo
    Ho messo sb.delete (0,sb.length());
    Fare un sb.setLength(0) ???

    Originariamente inviato da Cyocjo
    però rimane il problema che non mi scarica tutte le pagine ma solo alcune, più precisamente quelle contenute in Url [1], 3, 5, 7 e 9.

    A ogni ciclo salta un sito, ma non riesco a capire il perchè!!
    Sotto questo punto di vista il codice è corretto ... almeno così mi pare.
    L'array String[] degli url è riempito correttamente? (fai un print). Le connessioni hanno successo? (intendo anche lo status code in response).
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #23
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    23
    Il problema del salto di sito l'ho risolto, era un problema di riempimento dell'array.

    Per quanto riguarda l'altro quesito, secondo te perchè nel codice postato nell'intervento precedente, mi esce l'errore "missing return statement"???

    Thanks!!!!

  4. #24
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Cyocjo
    Per quanto riguarda l'altro quesito, secondo te perchè nel codice postato nell'intervento precedente, mi esce l'errore "missing return statement"???
    Il metodo riempiArray dichiara di ritornare un String[]. Quindi se ritorna "normalmente" deve ritornare "qualcosa". Fai un catch che è vuoto ... ok ma il metodo deve comunque ritornare qualcosa!!
    E la gestione delle eccezioni comunque non è completa/appropriata.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #25
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    23
    Ecco cosa non andava!!!!

    Il return l'ho messo nel finally, così tagliamo la testa al toro

    Per le eccezioni devo effettivamente lavorarci meglio, penso sempre a far bene (per quel che riesco) il try e le snobbo, ma cercherò di migliorare

    Non sò come ringraziarti, sei veramente molto disponibile e soprattutto molto preparato...GRAZIE!!!!

  6. #26
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    23
    Rieccolo!!!

    Stò implementando il download dei dati con il multithreading e per far questo stò leggendo Core Java 2 e mi sono sorte 2 domande:

    Nell'esempio che mi hai fatto tu alcuni post fa, dove usi il submit(), ho letto (se ho capito bene) che serve per restituire un Future per poi assegnarlo ad un altro metodo...giusto???
    Se non mi servisse il ritorno di un valore, devo usarlo???

    Poi ho letto di ScheduledExecutorService, che aziona il pool di thread ogni intervallo di tempo, è corretto, è la sua funzione???(a me servirebbe in quanto il download lo devo ripetere ogni n minuti).

    Altra domanda: ho letto del metodo skip di InputStream, che passando un numero di byte, questi vengono saltati in fase di lettura. Il problema è che il salto (per il metodo che ho trovato io) della lettura deve perforza partire dall'inizio (skip (10) salta i primi 10 byte). Esiste un metodo in cui si può impostare il byte di inizio e fine del salto???(io purtroppo non ho trovato niente).

    Grazie mille

  7. #27
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Cyocjo
    Nell'esempio che mi hai fatto tu alcuni post fa, dove usi il submit(), ho letto (se ho capito bene) che serve per restituire un Future per poi assegnarlo ad un altro metodo...giusto???
    Precisiamo: il Future non sei tu che lo istanzi (anche perché è una interfaccia!) .... è l'executor che ti fornisce un oggetto che implementa Future al ritorno dal submit(). E comunque ha davvero senso/utilità quando usi il submit() che riceve un Callable<T> (invece di un Runnable).
    Callable è praticamente simile/parallelo ad un Runnable, ha un metodo call() (concettualmente simile al run()) solo che ritorna un valore V. Quindi il tuo "lavoro" può far ritornare un V il quale viene incapsulato in un Future e chi ha inviato il "lavoro" può poi ottenere tale valore.

    Originariamente inviato da Cyocjo
    Se non mi servisse il ritorno di un valore, devo usarlo???
    No, puoi ignorarlo. Specialmente se hai passato un Runnable invece che un Callable.

    Originariamente inviato da Cyocjo
    Poi ho letto di ScheduledExecutorService, che aziona il pool di thread ogni intervallo di tempo, è corretto, è la sua funzione???(a me servirebbe in quanto il download lo devo ripetere ogni n minuti).
    Sì, è "temporizzato".

    Originariamente inviato da Cyocjo
    Esiste un metodo in cui si può impostare il byte di inizio e fine del salto???
    Cosa intendi?
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  8. #28
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    23
    I dati che servono a me sono in mezzo a una pagina html, quindi nell' InputStream la parte iniziale e la parte finale non mi interessano. Quindi ho trovato il metodo skip () che permette di saltare n byte dall'inizio dello stream, solo che a me servirebbe un metodo per saltare anche gli ultimi.

    esempio

    stream di 1000 byte, mi servono solo i byte da 400 a 500.

    Con skip (400) salto i primi 400 che non mi servono, ma anche i byte da 500 a 1000 dovrei saltare, solo che non ho trovato nessun metodo che mi permettess di specificare che bisogna saltare anche i byte da 500 (byte da cui iniziare lo skip) a 1000 (byte a cui finire lo skip), sai se esiste qualcosa del genere?

  9. #29
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    23
    Ciao andbin , rieccoti il codice:

    codice:
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.concurrent.*;
    
    class Riempi {
    public String [] RiempiArray (){
                String [] Url = new String[51];
                try {
                    int a=0;
                    BufferedReader in = new BufferedReader(new FileReader("Prova.txt"));
                    String str = in.readLine();
                    while (str != null) {
                        Url[a]=str;
                        str = in.readLine();
                        a++;
                    }
                    in.close();
                }
                catch (IOException e) {
                    System.out.println(e);
                }
                finally {
                return Url;
                }
            }
    }
    
    
    class Scaricare implements Runnable{
        
        public void run (){
        }
    
            public Scaricare(String s){
                 StringBuffer sb = new StringBuffer ();
                 int len;
                 char[] array = new char[10000];
                    try{
                        URL url = new URL(s);
                        URLConnection connessione = url.openConnection();
                        connessione.setDoInput(true);
                        connessione.setUseCaches(false);
                        InputStreamReader pagina = new InputStreamReader(connessione.getInputStream());
                        while ((len = pagina.read (array)) > 0){
                            sb.append (array, 0, len);
                        }
                        System.out.println(sb);
                        sb.setLength(0);
                        }
                    
                    catch (IOException e){
                        System.out.println(e);
                    }
            }
    }
    public class Main {
        public static void main(String[] args){
            int i = 0;
            String [] Url = new String [51];
            Riempi R = new Riempi();
            Url = R.RiempiArray();
            ExecutorService execService = Executors.newFixedThreadPool(8);
            while (i<51){
            execService.execute(new Scaricare(Url[i]));
            i++;
            }
            execService.shutdown();
            }
    }
    Secondo te il multithread va bene così o c'è qualche miglioramento da apportare?

    Poi volevo chiederti un opinione su una cosa strana (per le mie conoscenze):

    ripetendo più volte di seguito il run di questo codice, ovviamente senza nessuna modifica, mi capita che la durata dell'esecuzione cambi di molto, per far apparire a video le pagine html di 51 siti, il tempo la prima volta è di 40/45 secondi, poi di 15/17, poi ancora 40/45, poi 15/17 e continua a ripetersi questa sequenza di tempistiche.

    Le prime 2 volte che ho provato pensavo fosse un problema di linea, poi vedendo che i tempi si ripetono uguali per più volte, non sono riuscito a darmi una spiegazione

    Per il problema di saltare l'input del post precedente nessun consiglio??

    Grazie mille rostro:

  10. #30
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    23
    Non mi sai dire niente

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.