天天看點

Jsoup,(安卓)強大的爬蟲解析工具!介紹demo

介紹

  • Jsoup是一個用來處理html文本的java庫。它提供了非常友善的API,可以通過dom,css或者類似jquery的方法來提取和操作資料。 嗯,是以他到底是幹嘛的呢? 當我們通路一個網站拿到它的html代碼的時候,往往我們所需要的一些資料就已經包含在html裡,Jsoup就是幫我們把這些我們想要的資料提取出來。還是不夠清晰明了?沒關系,我們一起來看一個demo。

demo

  • 以解析本人首頁為例 https://www.jianshu.com/u/413ca7e5e66c ,首先是拿到首頁的html頁面,并字元串的格式傳回,這裡使用okhttp架構,各位看官老爺也可以使用其他架構,隻要能拿到html頁面即可。
new Thread(new Runnable() {
            @Override
            public void run() {
                OkHttpClient okHttpClient = new OkHttpClient();
                Request request = new Request.Builder().url(URL).build();
                try {
                    Response response=okHttpClient.newCall(request).execute();
                    String htmlData=response.body().string();
                    resolve(htmlData);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
           
  • 傳回的html字元串如下

    傳回的html

  • 然後利用Jsoup對得到的字元串進行解析,傳回浏覽器,按下F12,我們可以看到頁面的html代碼,找到對應的文章子產品的html,在某個div下的id為list-container的ul、li清單:

    文章子產品的html

  • 單看每一個li,可以看出文章的具體内容,這裡隻解析文章的标題,它在li裡的class為title的a标簽裡:

    需要解析的标題的位置

  • 根據Jsoup對得到的html進行解析:、
private void resolve(String htmlData) {
        Document document = Jsoup.parse(htmlData);
        Elements elements = document.select("div#list-container ul li");
        List<BlogModel> list=new ArrayList<>();
        for(Element element:elements){
            BlogModel blogModel = new BlogModel();
            blogModel.setTitle(element.select("a.title").first().text());
            list.add(blogModel);
        }
        for(BlogModel blogModel:list){
            Log.e("info",blogModel.getTitle());
        }

    }
           
  • 下面是得到的資料日志:

    解析結果

    -附

    jsoup 下載下傳位址。