Autore Topic: Problema nel Parsing jsoup html table  (Letto 449 volte)

Offline AnonymousDoor

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
  • Play Store ID:
    Gheoo
Problema nel Parsing jsoup html table
« il: 09 Settembre 2014, 16:54:46 CEST »
0
Ciao a tutti come da titolo ho problemi nel parsing di una tabella la pagina in questione  e questa Player - FIFA 14 Weekly - SoFIFA - Online FIFA DB Searching SoFIFA.com
Incomincio nel spiegare cosa mi serve praticamente in questa pagina ci sono una lista di giocatori sistemati in una tabella io voglio prendere i dati come il nome il viso del giocatore la sua posizione in campo e il valore
ecco la parte html
Codice: [Seleziona]
<table border="0" cellpadding="0" cellspacing="0" class="responsive" style="padding: 0px;">

        <tbody>
                    <tr class="odd">
                                <td>
                    <input type="checkbox" name="player" value="1179" class="player-check">             </td>
                                <td>
                    <a href="/players/?pn=0&amp;only=pn"><span class="pos gk">GK</span></a>             </td>
                <td class="hidden-phone">
                    <img src="http://cdn.sofifa.org/14/players/34/1179.png" class="list-avatar">
                </td>
                <td>
                    <a href="/players/?na=27&amp;only=na"><span class="n-flag n-27" title="Italy">Italy</span></a>              </td>
                <td>
                    <span class="prop bg-82">82</span>
                </td>
                <td>
                    <a href="/player/144377-gianluigi-buffon" title="Gianluigi Buffon">G. Buffon</a>                                    </td>
                <td class="hidden-phone">
                    35              </td>
                                                <td class="hidden-phone">
                    191cm/6'3"              </td>
                <td class="hidden-phone hidden-tablet">
                    83kg/183lbs             </td>
                <td class="hidden-phone">
                    <span class="prop bg-total">1383</span>
                </td>
            </tr>
                    </tbody>
    </table>
Ho provato con questo codice ma comunque non sono sicuro che vada bene:

Codice (Java): [Seleziona]
public class ListPlayer extends ActionBarActivity {
    ListView lista;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_listplayer);
        lista = (ListView)this.findViewById(R.id.main_lista);
        lista.addHeaderView(new View(this));
        lista.addFooterView(new View(this));
        ParsingPaginaWeb parsing = new ParsingPaginaWeb();
        parsing.execute("");
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.list_player, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    private class ParsingPaginaWeb extends AsyncTask<String,String,String> {

        ArrayList<String> titoligiocatori;
        ArrayList<String> ruoli;
        ArrayList<String> valori;
        ArrayList<Bitmap> visi;
        @Override
        protected void onPreExecute()
        {
            titoligiocatori = new ArrayList<String>();
            ruoli = new ArrayList<String>();
            valori = new ArrayList<String>();
            visi = new ArrayList<Bitmap>();
        }

        @Override
        protected String doInBackground(String... params) {
            Bitmap bitmapviso;
            try {
                Document doc = Jsoup.connect("[url=http://sofifa.com/players/index.html"]Player - FIFA 14 Weekly - SoFIFA - Online FIFA DB Searching SoFIFA.com[/url]).get();
                Element table = doc.select("table").first();
                Elements tr = table.select("tr");
                for(Element giocatore : tr)
                {
                    Elements td= giocatore.select("td");
                    String index1 = td.get(0).text();
                    Element ruolo = td.get(1);
                    String ruologiocatore = ruolo.select("span").text();
                    ruoli.add(ruologiocatore);
                    Element listavatar = td.get(2);
                    Elements facce = listavatar.select("img");
                    for (Element viso : facce) {
                        String linkviso = viso.attr("src");
                        InputStream input = new java.net.URL(linkviso).openStream();
                        bitmapviso = BitmapFactory.decodeStream(input);
                        visi.add(bitmapviso);
                    }
                    Element index4 = td.get(3);
                    Element valore = td.get(4);
                    String valoregiocatore= valore.select("span").text();
                    valori.add(valoregiocatore);
                    Element nome = td.get(5);
                    String nomegiocatore= nome.select("a").text();
                    titoligiocatori.add(nomegiocatore);
                }

            } catch (Exception e) {
                // gestione dell'eccezione
                // ad esempio mostrare messaggio di errore o altro (qui nel logcat)
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result)
        {
            // dopo che ho eseguito il parsing mostro i dati nella listview
            // usando il custom array adpater ParsingArrayAdapter
            ParsingArrayAdapter adapter = new ParsingArrayAdapter(ListPlayer.this, titoligiocatori, ruoli, valori, visi);
            lista.setAdapter(adapter);
        }
    }
}

Ma comunque non va ecco il logcat:

Codice: [Seleziona]
09-09 16:05:58.209 18727-18742/com.gheoo.fifayoung W/System.err﹕ java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2 09-09 16:05:58.209 18727-18742/com.gheoo.fifayoung W/System.err﹕ at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 09-09 16:05:58.209 18727-18742/com.gheoo.fifayoung W/System.err﹕ at java.util.ArrayList.get(ArrayList.java:308) 09-09 16:05:58.209 18727-18742/com.gheoo.fifayoung W/System.err﹕ at org.jsoup.select.Elements.get(Elements.java:544) 09-09 16:05:58.209 18727-18742/com.gheoo.fifayoung W/System.err﹕ at com.gheoo.fifayoung.ListPlayer$ParsingPaginaWeb.doInBackground(ListPlayer.java:90) 09-09 16:05:58.209 18727-18742/com.gheoo.fifayoung W/System.err﹕ at com.gheoo.fifayoung.ListPlayer$ParsingPaginaWeb.doInBackground(ListPlayer.java:60) 09-09 16:05:58.209 18727-18742/com.gheoo.fifayoung W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288) 09-09 16:05:58.209 18727-18742/com.gheoo.fifayoung W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237) 09-09 16:05:58.209 18727-18742/com.gheoo.fifayoung W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 09-09 16:05:58.209 18727-18742/com.gheoo.fifayoung W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 09-09 16:05:58.209 18727-18742/com.gheoo.fifayoung W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 09-09 16:05:58.209 18727-18742/com.gheoo.fifayoung W/System.err﹕ at java.lang.Thread.run(Thread.java:841)
Leggendo il logcat comunuqe non ho capito come sistemare dato che non ho capito bene come fare il parsing di elemtenti presenti in una tabella
Per favore qualcuno che mi spieghi dove sbaglio!

Offline tonno16

  • Utente storico
  • *****
  • Post: 1186
  • Respect: +57
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Problema nel Parsing jsoup html table
« Risposta #1 il: 09 Settembre 2014, 18:30:46 CEST »
0
io non so se ti sia di aiuto. Feci il parsing della sezione vendo di un noto forum: Ci misi ore per analizzare il codice. Avevo trovato che tutte le righe erano contenute in una tabella con id univoco "threadslist".
Dopo di che sono andato avanti per tentativi stampando su una textview il figlio/figli. E sempre filtrando piano piano solo arrivato all'ultimo elemento che era contenuto dentro un <a>vendo qualcosa a 299 + sped</a>

se Ti interessa questo è il codice:

Codice (Java): [Seleziona]
try {
                // ricavo l'html della pagina con user agent desktop (Chrome)
                // e timeout 30000
                Document doc = Jsoup.connect(URL)
                        .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();

                /* every thread has is defined into <tr>, all tr are on <tbody> tag with unique id = "threadslist" */
                Element tbody = doc.getElementById("threadslist");

                /* take a container of all Element with tag <tr> */
                Elements trS = tbody.getElementsByTag("tr");

                list.clear();
                for(int i=15;i<trS.size();i++){
                    Element element = trS.get(i).getElementsByClass("alt1").get(1);

                    String titolo = element.getElementsByTag("a").text();
                    String link =   "http://forum.telefonino.net/"+element.getElementsByTag("a").attr("href").toString();
                    list.add(new Pair(titolo,link));
                }

            }


Offline AnonymousDoor

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
  • Play Store ID:
    Gheoo
Re:Problema nel Parsing jsoup html table
« Risposta #2 il: 11 Settembre 2014, 16:25:49 CEST »
0
grazie ho risolto !!! i problema era simile al tuo

Offline AnonymousDoor

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
  • Play Store ID:
    Gheoo
Re:Problema nel Parsing jsoup html table
« Risposta #3 il: 07 Ottobre 2014, 18:40:08 CEST »
0
io non so se ti sia di aiuto. Feci il parsing della sezione vendo di un noto forum: Ci misi ore per analizzare il codice. Avevo trovato che tutte le righe erano contenute in una tabella con id univoco "threadslist".
Dopo di che sono andato avanti per tentativi stampando su una textview il figlio/figli. E sempre filtrando piano piano solo arrivato all'ultimo elemento che era contenuto dentro un <a>vendo qualcosa a 299 + sped</a>

se Ti interessa questo è il codice:

Codice (Java): [Seleziona]
try {
                // ricavo l'html della pagina con user agent desktop (Chrome)
                // e timeout 30000
                Document doc = Jsoup.connect(URL)
                        .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();

                /* every thread has is defined into <tr>, all tr are on <tbody> tag with unique id = "threadslist" */
                Element tbody = doc.getElementById("threadslist");

                /* take a container of all Element with tag <tr> */
                Elements trS = tbody.getElementsByTag("tr");

                list.clear();
                for(int i=15;i<trS.size();i++){
                    Element element = trS.get(i).getElementsByClass("alt1").get(1);

                    String titolo = element.getElementsByTag("a").text();
                    String link =   "http://forum.telefonino.net/"+element.getElementsByTag("a").attr("href").toString();
                    list.add(new Pair(titolo,link));
                }

            }
ciao praticamente e ricambiata la struttura del sito ehm non di molto ma non funziona piu il parsing protesti darmi una mano?
« Ultima modifica: 07 Ottobre 2014, 18:49:47 CEST da xharryx »