解析不显示内容

时间:2013-11-20 09:55:00

标签: java android html-parsing jsoup

我正在尝试解析此网站http://multiplayer.it/但没有任何正面结果..这是主要活动:

public class MainActivity extends Activity {

    ListView lista;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lista = (ListView)this.findViewById(R.id.main_lista);//recupero lista da id

        //creo ed eseguo l'asynctask
        ParsingPaginaWeb parsing = new ParsingPaginaWeb();
        parsing.execute("");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

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

        ArrayList<String> titoli; //lista dei titoli
        ArrayList<String> descrizioni; //lista delle descrizioni

        @Override
        protected void onPreExecute()
        {
            //prima di eseguire il parsing inizializzo gli arraylist
            titoli = new ArrayList<String>();
            descrizioni = new ArrayList<String>();
        }

        @Override
        protected String doInBackground(String... params) {

            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://www.multiplayer.it")
                        .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.getElementById("news_wrapper");

                // prendo gli elementi che mi interessano dalla tabella
                Elements sezioni = tabella.getElementsByClass("content");
                for(Element sezione : sezioni)//per ogni sezione tra gli elementi ricavati prima
                {
                    //ricavo ogni riga nella sezione
                    Elements righe_sezione = sezione.getElementsByClass("news-col-2");                  
                    for(Element riga : righe_sezione)
                    {
                        //prelevo la cella delle info
                        Element info = riga.getElementsByClass("news-box two_columns three_columns").first();

                        // ricavo il titolo
                        // (con .text() ottengo il testo non formattato
                        String titolo = info.getElementsByTag("h3").first().text();

                        // ricavo la descrizione
                        // (uso .first() per essere sicuro che sia proprio la descrizione
                        // e non i moderatori )
                        //String descrizione = info.getElementsByTag("p").first().text();

                        // inserisco nei rispettivi arraylist
                        titoli.add(titolo);
                        //descrizioni.add(descrizione);
                    }
                }
            } catch (Exception e) {
                // gestione dell'eccezione
                // ad esempio mostrare messaggio di errore o altro (qui nel logcat)
                Log.e("ESEMPIO", "ERROR");
            }
            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(MainActivity.this, titoli, descrizioni);
            lista.setAdapter(adapter);
        }

    }

}

正如您所看到的,我只需要显示标题“titoli”而不是“descrizioni”..但我的活动中没有显示任何内容..它是空白的...有人可以帮我这个解析好吗?

1 个答案:

答案 0 :(得分:0)

诀窍在于选择器语法,我编写了"h3 > a[href]",这意味着选择具有href属性的所有元素,这些元素是一个的直接后代。这是我的代码,我相信它会检索所有标题。

public static void main(String[] args) {
    try {
        Document doc = Jsoup.connect("http://www.multiplayer.it")
                .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();

        // Select all the <a> elements with an href attribute which are immediate
        // descendants of an <h3> element.
        Elements links = doc.select("h3 > a[href]");
        for (Element link : links) {
            System.out.println(link.text());
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}