Android利用Jsoup解析html 開發網站客戶端小記。

這些天業餘時間比較多,閒來無事,想起了之前看過開發任意網站客戶端的一篇文章,就是利用jsoup解析網站網頁,經過標籤獲取想要的內容。好了廢話很少說,用到的工具爲 jsoup-1.7.2.jar包,具體jsoup的相關文檔,請去這邊看http://jsoup.org/,這裏有所有Api能夠查詢。html

這裏解析的網站是一個食譜網站,首先解析的是大類欄目標籤。jquery

若是你使用過jquery那麼 ,接下來的事情就小菜一碟了,咱們按F12進入瀏覽器的開發者模式,去分析當前html頁面的結構,以下圖:數據庫

每一個<li></li>標籤裏面的值就是咱們須要的,接下來咱們須要異步去獲取網頁信息,首先建立一個鏈接,生成一個Document對象,取得標題所在<ul>的id值,經過select過濾。瀏覽器

Elements divs = content.select("#siteNav");

而後經過Jsoup去解析上圖的標籤,經過循環取出標題欄還有子目錄的超連接,插入數據庫,超連接用做展開子目錄的網頁地址,像這種網站大的標題結構通常是不會改變的,能夠留做緩存,而不用每次進入總要加載解析。緩存

//異步獲取信息
    class Loadhtml extends AsyncTask<String, String, String>
    {
        ProgressDialog bar;
        Document doc;
        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub
            try {
                 doc = Jsoup.connect(Constans.NetAddress).timeout(5000).post();
                 Document content = Jsoup.parse(doc.toString());
                 Elements divs = content.select("#siteNav");
                 Document divcontions = Jsoup.parse(divs.toString());
                 Elements element = divcontions.getElementsByTag("li");
                 Log.d("element", element.toString());
                 for(Element links : element)
                 {
                     String title = links.getElementsByTag("a").text();
 
String link
= links.select("a").attr("href").replace("/", "").trim(); String url = Constans.NetAddress+link; ContentValues values = new ContentValues(); values.put("Title", title); values.put("Url", url); usedatabase.insert("Cach", values); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override protected void onPostExecute(String result) { // TODO Auto-generated method stub super.onPostExecute(result); // Log.d("doc", doc.toString().trim()); bar.dismiss(); ListItemAdapter adapter = new ListItemAdapter(context, usedatabase.getlist()); listmenu.setAdapter(adapter); } @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); bar = new ProgressDialog(context); bar.setMessage("正在加載數據····"); bar.setIndeterminate(false); bar.setCancelable(false); bar.show(); } }

最終手機斷顯示
異步

今天就總結到這裏,下次具體講解析完數據後,經過SQLITE存儲,還有每一個標題的子目錄展開等。ide

相關文章
相關標籤/搜索