解析页面时没有任何内容

时间:2013-09-26 06:24:08

标签: java android parsing jsoup

 @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.androidiani.com/forum")
                    .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("floatcontainer").first();

            // prendo gli elementi che mi interessano dalla tabella
            Elements sezioni = tabella.getElementsByClass("forumtable td");
            for(Element sezione : sezioni)//per ogni sezione tra gli elementi ricavati prima
            {
                //ricavo ogni riga nella sezione
                Elements righe_sezione = sezione.getElementsByClass("foruminfo");                   
                for(Element riga : righe_sezione)
                {
                    //prelevo la cella delle info
                    Element info = riga.getElementsByClass("datacontainer").first();

                    // ricavo il titolo
                    // (con .text() ottengo il testo non formattato
                    String titolo = info.getElementsByClass("forumtitle").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", "ERRORE NEL PARSING");
        }
        return null;
    }

我第一次尝试解析一个html页面来显示一个论坛的部分列表(androidiani.com/forum)。但是没有出现,我无法理解为什么。代码在顶部

1 个答案:

答案 0 :(得分:1)

这些行中有错误:

Element tabella = doc.getElementsByClass("floatcontainer").first();;
tabella.getElementsByClass("forumtable td")

应该是,我理解任务:

Element tabella = doc.getElementById("forums");
Elements sezioni = tabella.select(".foruminfo.td");

使用Chrome的开发者工具可以为这类工作提供很多帮助。

<强>更新

工作代码:

public static void main(String[] args) throws Exception {
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.androidiani.com/forum")
        .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("forums");

    // prendo gli elementi che mi interessano dalla tabella
    Elements sezioni = tabella.select(".foruminfo.td");
    for(Element sezione : sezioni)//per ogni sezione tra gli elementi ricavati prima
    {
        //ricavo ogni riga nella sezione
        Elements righe_sezione = sezione.getElementsByClass("foruminfo");
        for(Element riga : righe_sezione)
        {
            //prelevo la cella delle info
            Element info = riga.getElementsByClass("datacontainer").first();

            // ricavo il titolo
            // (con .text() ottengo il testo non formattato
            String titolo = info.getElementsByClass("forumtitle").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

            System.out.println("titolo = " + titolo);
            System.out.println("descrizione = " + descrizione);
        }
    }
} catch (Exception e) {
    // gestione dell'eccezione
    // ad esempio mostrare messaggio di errore o altro (qui nel logcat)
    e.printStackTrace();
}
}