Autore Topic: Parsing Html Page Help me!  (Letto 2175 volte)

Offline lillogoal

  • Utente normale
  • ***
  • Post: 167
  • Respect: +4
    • Google+
    • lillosogliani
    • Mostra profilo
    • LilloNet
  • Dispositivo Android:
    Galaxy s3, Nexus 7,galaxy s advance,galaxy scl
  • Play Store ID:
    Lillonet Inc.
  • Sistema operativo:
    Windows 8,7 & Kali-Linux
Parsing Html Page Help me!
« il: 05 Settembre 2013, 21:51:27 CEST »
0
Salve a tutti,
oggi stavo tentando di fare il parsing di un pagina html, seguendo la vostra guida pubblicata su anddev.it questo forum.
Vi Scrivo qua sotto il codice della pagina html da me interessata per il parsing e il codice Java per l'ottenimento dei dati, per poi riporre i dati in una listview, mi servirebbe capire quali classi dovrei mettere per ottenere il titolo del file da scaricare e il link per ogni riga dalla pagina generata:
Ho provato a spiegarvelo, se non capite fatemelo sapere. Vi ringrazio in anticipo
Saluti

Pagina HTML:
Codice: [Seleziona]
<div class="search_table_results">
        <div class="div_input_search">

            <form id="form_search" method="get" action="http://mega-search.me/search">
                <input x-webkit-speech id="k" name="k" value="voglio tornare" type="text" placeholder="Inserisci la tua ricerca" class="input_search2" />
            </form>
        </div>

        <div class="results">


    <!-- <a target="_blank" href="http://www.federation-le-jeu.com" class="link pub">
        <span class="icon icon-bubble-notification"></span>
        <span class="title">[Nouveauté 2013] Devenez un super héros !</span>

        <div style="display:none" class="infos">
        </div>

        <div style="display:none" class="comments">
        </div>

        <div style="clear:both"></div>
    </a> -->



    <a target="_blank" href="http://mega-search.me/goto-106661" class="link">

        <span class="icon icon-music"></span>
        <span class="title">DJ Matrix feat Paps'n'Skar  Vise   <u>voglio</u> <u>tornare</u> negli anni 90   Spankers Mix[1]<i>.mp3</i></span>
        <span class="infos_link">
            <span class="size">
                6.3 <span class="a">MB</span>           </span>

            <span class="hits">
                <span class="icon icon-cursor"></span>
                56          </span>

            <span class="good">
                <span class="icon icon-thumbs-up-3"></span>
                0           </span>

            <span class="bad">
                <span class="icon icon-thumbs-up-4"></span>
                0           </span>

            <span class="nbComments">
                <span class="icon icon-bubbles"></span>
                0           </span>

                            <span onclick="window.open('[url=http://mega-stream.me?]MEGA-STREAM.ME - Mega streaming links[/url]h=WRIlAahL&k=Phv3tztJX2VJXJGIIPkWDhib7hwJ5C9pMEASKgy0W-M','_blank'); return false;" class="streaming">
                    <span class="icon icon-camera-6"></span>
                    STREAM
                </span>



        </span>

        <div style="display:none" class="infos">
            <span class="stats_key">Data inserimento</span> <span class="stats_value">23/08 20:16</span><br />
            <span class="stats_key">Commentari</span> <span class="stats_value">0</span><br />
            <span class="stats_key">Clics</span> <span class="stats_value">56</span><br />

            <span class="stats_key">+1 / -1 / Ratio</span>
            <span class="stats_value">
                0 / 0 / 0%
            </span><br />

            <div class="separe2"></div>

                            <span class="stats_key">Aggiunto da</span> <span class="stats_value">testerapp</span><br />
                <span class="stats_key">Ratio globale</span> <span class="stats_value">72%</span><br />
                <span class="stats_key">Links aggiunti</span> <span class="stats_value">4</span><br />
                    </div>

        <div style="display:none" class="comments">


            <div class="listComments list_106661">
                            </div>
        </div>

        <div style="clear:both"></div>
    </a>
    <a target="_blank" href="http://mega-search.me/goto-99218" class="link">

        <span class="icon icon-music"></span>
        <span class="title">DJ Matrix feat Paps'n'Skar  Vise <u>voglio</u> <u>tornare</u> negli anni 90<i>.mp3</i></span>
        <span class="infos_link">
            <span class="size">
                3.4 <span class="a">MB</span>           </span>

            <span class="hits">
                <span class="icon icon-cursor"></span>
                70          </span>

            <span class="good">
                <span class="icon icon-thumbs-up-3"></span>
                0           </span>

            <span class="bad">
                <span class="icon icon-thumbs-up-4"></span>
                0           </span>

            <span class="nbComments">
                <span class="icon icon-bubbles"></span>
                0           </span>

                            <span onclick="window.open('[url=http://mega-stream.me?]MEGA-STREAM.ME - Mega streaming links[/url]h=gE8hXLhK&k=CE_LoTjVc6NcmcWKWxjTOC2BgFQYPJziEBsmPRwymnM','_blank'); return false;" class="streaming">
                    <span class="icon icon-camera-6"></span>

Codice Java:
Codice (Java): [Seleziona]
        Document doc = Jsoup.connect("http://mega-search.me/search?k=")
                                                .userAgent("Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22")
                                                .timeout(30000).get();
                               
                                // prendo la tabella
                                // (con .first() ottengo il primo elemento, in questo caso l'unico )
                                Element tabella = doc.getElementsByClass("search_table_results").first();
                               
                                // prendo gli elementi che mi interessano dalla tabella
                                Elements sezioni = tabella.getElementsByClass("results");
                                for(Element sezione : sezioni)//per ogni sezione tra gli elementi ricavati prima
                                {
                                        //ricavo ogni riga nella sezione
                                        Elements righe_sezione = sezione.getElementsByClass("size");                                   
                                        for(Element riga : righe_sezione)
                                        {
                                                //prelevo la cella delle info
                                                Element info = riga.getElementsByClass("streaming").first();
                                               
                                                // ricavo il titolo
                                                // (con .text() ottengo il testo non formattato
                                                String titolo = info.getElementsByClass("title").first().text();
                                               
                                                // ricavo la descrizione
                                                // (uso .first() per essere sicuro che sia proprio la descrizione
                                                // e non i moderatori )
                                                String descrizione = info.getElementsByTag("link").first().text();
                                               
                                                // inserisco nei rispettivi arraylist
                                                titoli.add(titolo);
                                                descrizioni.add(descrizione);
Chi non progetta la sicurezza , programma il fallimento! K.M

Offline matttt

Re:Parsing Html Page Help me!
« Risposta #1 il: 05 Settembre 2013, 22:35:03 CEST »
+1
E' più semplice di quello che pensi usando i selettori CSS.
Prova con:
Codice (Java): [Seleziona]
Elements links = doc.select(".link");
for( Element link: links )
{
    String href = link.attr("href");
    Elements titles = link.select( ".title" );
    Strint title = ( links.size() > 0 ) ? links.get( 0 ).toString() : "";
}

Non l'ho testato quindi magari qualcosa da sistemare può esserci.
Le mie apps su Google Play Store:

Offline lillogoal

  • Utente normale
  • ***
  • Post: 167
  • Respect: +4
    • Google+
    • lillosogliani
    • Mostra profilo
    • LilloNet
  • Dispositivo Android:
    Galaxy s3, Nexus 7,galaxy s advance,galaxy scl
  • Play Store ID:
    Lillonet Inc.
  • Sistema operativo:
    Windows 8,7 & Kali-Linux
Re:Parsing Html Page Help me!
« Risposta #2 il: 05 Settembre 2013, 22:36:49 CEST »
0
Cosa fanno? cosa cambia da quello che ho fatto io? poi per aggiungerli alla listview posso fare come ho c'era scritto?
Grazie davvero!
Chi non progetta la sicurezza , programma il fallimento! K.M

Offline matttt

Re:Parsing Html Page Help me!
« Risposta #3 il: 05 Settembre 2013, 22:40:33 CEST »
0
Col primo select() prendi tutti gli elementi del documento che hanno classe uguale a "link"
Poi dentro il for col secondo select() fatto soltanto dentro l'elemento con tag A prendi tutti i sotto elementi con classe uguale a "title".
Ma ce n'è uno solo, quindi prendi il primo (ho messo un controllo per vedere che te ne abbia trovato almeno 1, giusto per sicurezza)
Le mie apps su Google Play Store:

Offline lillogoal

  • Utente normale
  • ***
  • Post: 167
  • Respect: +4
    • Google+
    • lillosogliani
    • Mostra profilo
    • LilloNet
  • Dispositivo Android:
    Galaxy s3, Nexus 7,galaxy s advance,galaxy scl
  • Play Store ID:
    Lillonet Inc.
  • Sistema operativo:
    Windows 8,7 & Kali-Linux
Re:Parsing Html Page Help me!
« Risposta #4 il: 05 Settembre 2013, 22:41:55 CEST »
0
Grazie davvero... ti faccio sapere :) provo subito!
Chi non progetta la sicurezza , programma il fallimento! K.M

Offline matttt

Re:Parsing Html Page Help me!
« Risposta #5 il: 05 Settembre 2013, 22:44:06 CEST »
0
Ottimo, ti riassumo le regolette select del CSS:
con .select( "#valore_id" ) selezioni l'elemento con id "valore_id"
con .select( ".valore_classe" ) selezioni tutti gli elementi con classe "valore_classe"
con .select( "li" ) selezioni tutti gli elementi con tag LI

Poi se vuoi ci sono tutte le altre regole... che trovi comodamente online  :-P
Le mie apps su Google Play Store:

Offline lillogoal

  • Utente normale
  • ***
  • Post: 167
  • Respect: +4
    • Google+
    • lillosogliani
    • Mostra profilo
    • LilloNet
  • Dispositivo Android:
    Galaxy s3, Nexus 7,galaxy s advance,galaxy scl
  • Play Store ID:
    Lillonet Inc.
  • Sistema operativo:
    Windows 8,7 & Kali-Linux
Re:Parsing Html Page Help me!
« Risposta #6 il: 05 Settembre 2013, 22:46:34 CEST »
0
Grazie di nuovo :) nel codice di prima nella 2 stringa l'hai dichiarata male, un errore di battitura :)

Post unito: 05 Settembre 2013, 22:52:21 CEST
MI ha restituito questo errore: nel logcat e l'app è crashata

Codice: [Seleziona]
838-854/? E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
        java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:299)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
        at java.util.concurrent.FutureTask.run(FutureTask.java:239)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
        at java.lang.Thread.run(Thread.java:856)
        Caused by: java.lang.NoClassDefFoundError: org.jsoup.Jsoup
        at com.app.myapplication.MainActivity$ParsingPaginaWeb.doInBackground(MainActivity.java:84)
        at com.app.myapplication.MainActivity$ParsingPaginaWeb.doInBackground(MainActivity.java:39)
        at android.os.AsyncTask$2.call(AsyncTask.java:287)
        at java.util.concurrent.FutureTask.run(FutureTask.java:234)

Post unito: 06 Settembre 2013, 00:34:06 CEST
Risolto il problema del logcat, però non ho ottenuto quello che volevo con il codice che mi hai dato tu :(
« Ultima modifica: 06 Settembre 2013, 00:34:06 CEST da lillogoal, Reason: Merged DoublePost »
Chi non progetta la sicurezza , programma il fallimento! K.M

Offline matttt

Re:Parsing Html Page Help me!
« Risposta #7 il: 06 Settembre 2013, 08:44:42 CEST »
0
Quindi che struttura vorresti ottenere di preciso?
Le mie apps su Google Play Store:

Offline lillogoal

  • Utente normale
  • ***
  • Post: 167
  • Respect: +4
    • Google+
    • lillosogliani
    • Mostra profilo
    • LilloNet
  • Dispositivo Android:
    Galaxy s3, Nexus 7,galaxy s advance,galaxy scl
  • Play Store ID:
    Lillonet Inc.
  • Sistema operativo:
    Windows 8,7 & Kali-Linux
Re:Parsing Html Page Help me!
« Risposta #8 il: 06 Settembre 2013, 11:03:46 CEST »
0
Il titolo senza tag ecc nella prima textview, sotto la grandezza del file, e a sinistra l'immagine, cmq sono riuscito in parte a risolvere.
Avrei da farti una domanda
Chi non progetta la sicurezza , programma il fallimento! K.M

Offline matttt

Re:Parsing Html Page Help me!
« Risposta #9 il: 06 Settembre 2013, 12:59:56 CEST »
0
Titolo senza tag... nel codice che ti ho scritto cambia il toString in text()
Dimensione del file... basta che fai come per il titolo solo che usi come selettore .size
Immagine... mi sembra sia vuota nell'esempio che hai postato... cmq puoi fare come per i 2 precedenti ma con selettore .icon
Le mie apps su Google Play Store:

Offline lillogoal

  • Utente normale
  • ***
  • Post: 167
  • Respect: +4
    • Google+
    • lillosogliani
    • Mostra profilo
    • LilloNet
  • Dispositivo Android:
    Galaxy s3, Nexus 7,galaxy s advance,galaxy scl
  • Play Store ID:
    Lillonet Inc.
  • Sistema operativo:
    Windows 8,7 & Kali-Linux
Re:Parsing Html Page Help me!
« Risposta #10 il: 06 Settembre 2013, 19:06:45 CEST »
0
ok, ora mi ottiene la riga piena di roba, se volessi tenere solo la parte del titolo della riga? senza la roba dei commenti ecc?
Chi non progetta la sicurezza , programma il fallimento! K.M

Offline matttt

Re:Parsing Html Page Help me!
« Risposta #11 il: 06 Settembre 2013, 19:20:56 CEST »
0
Postami il codice che hai messo ora.
Se hai fatto come ti ho scritto in teoria non dovrebbe prenderti dentro anche i commenti (gli elementi con classe "title" non hanno i commenti all'interno)
Le mie apps su Google Play Store:

Offline lillogoal

  • Utente normale
  • ***
  • Post: 167
  • Respect: +4
    • Google+
    • lillosogliani
    • Mostra profilo
    • LilloNet
  • Dispositivo Android:
    Galaxy s3, Nexus 7,galaxy s advance,galaxy scl
  • Play Store ID:
    Lillonet Inc.
  • Sistema operativo:
    Windows 8,7 & Kali-Linux
Re:Parsing Html Page Help me!
« Risposta #12 il: 06 Settembre 2013, 19:26:08 CEST »
0
NO io dico i commenti della pagina :) Vorrei solo il titolo, cioè il nome del file e l'estensione e basta.
Codice (Java): [Seleziona]
try {
                                // NB: controllate di importare le classi giuste
                                // all'inizio ci deve essere org.jsoup
                               
                                // ricavo l'html della pagina con user agent desktop (Chrome)
                                // e timeout 30000
                                Document doc = Jsoup.connect("http://mega-search.me/search?k=")
                                                .userAgent("Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22")
                                                .get();
                               
                                // prendo la tabella
                                // (con .first() ottengo il primo elemento, in questo caso l'unico )
                Elements links = doc.select(".link");
                for( Element link: links )
                {
                    String href = link.attr("href");
                    Elements titles = link.select( ".title" );
                    Elements titolo = links.select("title");
                    cont++;
                    String title = ( links.size() > 0 ) ? links.get( cont ).text() : "";
                    titoli.add(title);
                    descrizioni.add(href);

                }
                                                // inserisco nei rispettivi arraylist



                        } catch (Exception e) {
                                // gestione dell'eccezione
                                // ad esempio mostrare messaggio di errore o altro (qui nel logcat)
                                Log.e("ESEMPIO", "ERRORE NEL PARSING");
                        }

così funziona tutto, solo che nei "title": c'è tutta la riga che ha trovato dando la classe link, io vorrei solo il titolo del file e l'estensioen
Chi non progetta la sicurezza , programma il fallimento! K.M

Offline matttt

Re:Parsing Html Page Help me!
« Risposta #13 il: 06 Settembre 2013, 22:11:37 CEST »
+1
Ah ecco... allora ti avevo scritto io del codice non valido :)
Cmq anche tu Lillo non copiare pari pari soltanto, devi capire quello che ti propongo e casomai intervenire.

Prova con:

Codice (Java): [Seleziona]
Elements links = doc.select(".link");
for( Element link: links )
{
    String href = link.attr("href");
    Elements titles = link.select( ".title" );
    String title = ( titles.size() > 0 ) ? titles.get( 0 ).text() : "";
    titoli.add( title );
    descrizioni.add( href );
}
Le mie apps su Google Play Store:

Offline lillogoal

  • Utente normale
  • ***
  • Post: 167
  • Respect: +4
    • Google+
    • lillosogliani
    • Mostra profilo
    • LilloNet
  • Dispositivo Android:
    Galaxy s3, Nexus 7,galaxy s advance,galaxy scl
  • Play Store ID:
    Lillonet Inc.
  • Sistema operativo:
    Windows 8,7 & Kali-Linux
Re:Parsing Html Page Help me!
« Risposta #14 il: 06 Settembre 2013, 22:49:26 CEST »
0
Grazie mille, cmq il cont io ce lo avrei lasciato, così mi trovava tutti i valori con classe .link della pagina :)
Chi non progetta la sicurezza , programma il fallimento! K.M