天天看点

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 下载地址。