【问题标题】:Parsing from website Android从网站Android解析
【发布时间】:2014-01-09 11:55:32
【问题描述】:

我正在尝试解析这个网站:http://sbaftv.superdriver.it/ro/asp/ricercaorari.asp?user=FTV1&CodProfilo=1&VisInternet=1&visnota=0,特别是 Comune di PartenzaComune di Arrivo 中的选项,但我做不到。这是代码:

public class MainActivity extends Activity {

    ListView lista;
    static final String BLOG_URL = "http://sbaftv.superdriver.it/ro/asp/ricercaorari.asp?user=FTV1&CodProfilo=1&VisInternet=1&visnota=0";
    @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("");
    }

    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 {

                Document doc = Jsoup.connect(BLOG_URL).get(); //E' il sito dove faccio il parsing   
                // prelevo l'h3 cioè il titolo di ogni sezione e poi ciclo tutto
                Elements nodeBlogStats = doc.select("div.comunePartINI");
                for(Element sezione : nodeBlogStats)//per ogni sezione tra gli elementi ricavati prima
                {

                        titoli.add(sezione.text());
                        //descrizioni.add(descrizione);

                }
            } catch (Exception e) {
                // In caso di errore
                Log.e("ESEMPIO", "ERRORE NEL PARSING");
            }
            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);
            lista.setAdapter(adapter);
        }

    }

}

应用程序显示一个空的活动。有什么想法吗?

【问题讨论】:

    标签: java android parsing jsoup


    【解决方案1】:

    那是因为您没有正确解析数据。它返回零个元素。我已经修改了你的解析代码。以下代码提取了 Comune di Partenza 的所有选项。

    在你的 try 块中使用以下代码

    doc = Jsoup.connect(BLOG_URL).get();
    Elements nodeBlogStats = doc.select("#comunePartINI > option");
    for(Element sezione : nodeBlogStats)
    {
        titoli.add(sezione.text());
    }
    

    从 asynctask 返回结果并在 onPostExecute 中使用它而不是定义类的字段然后修改它也是一个好习惯。

    【讨论】:

    • 是的,它有效!惊人!谢谢..您认为可以解析该页面中的所有内容以创建应用程序吗?
    • jsoup 可以轻松解析源代码中可用的任何信息。只要数据可用,您就可以在应用程序中以任何您想要的方式使用它。请检查您正在使用的网站是否存在任何侵犯版权的行为。
    • 我可以给你一些关于如何进行的建议,但任何编程的东西你只需要做。如果您发现任何问题,请在 stackoverflow 上询问。
    • 嗨,你能帮我解析一下这个网页中的&lt;p&gt;标签吗? multiplayer.it/notizie/… 使用我的代码?
    • 使用这个元素 e=doc.select("p");更具体地说,究竟是哪个

      标签?无论如何,我想以上内容会让您入门。

    【解决方案2】:

    您的选择器正在尝试检索具有“comunePartINI”类属性的“div”节点。我认为您确实需要检索具有“comunePartINI” id 属性的“选择”节点中包含的“选项”节点:

    Elements nodeBlogStats = doc.select("select#comunePartINI > option");
    for(Element sezione : nodeBlogStats)//per ogni sezione tra gli elementi ricavati prima
    {
        titoli.add(sezione.text());
    }
    

    问候。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 2012-02-12
      • 2012-07-18
      • 2014-09-27
      • 2015-10-05
      相关资源
      最近更新 更多