Jsoup网页数据抓取案例

关于Jsoup的基础知识点这里就不说了,个人认为很多大牛写的很详细也比较全面,这里就简单举一个使用例子玩玩,社长也比较喜欢拿例子来理解一些知识点。

给几个有用的链接:

1、jsoup下载地址

https://jsoup.org/download

2、待会儿会用到,主要用来测试一些选择器之类的是否选择到数据,还可以查询当前浏览器user-Agent

https://try.jsoup.org/

废话不多说,以泡在网上的日子Android分类内容为例子。

页面地址:

http://www.jcodecraeer.com/plus/search.php?keyword=android&searchtype=titlekeyword&channeltype=0&orderby=&kwtype=0&pagesize=10&typeid=0&TotalResult=1244&PageNo=1

点击F12或者右键查看网页元素去分析需要抓取的数据所在位置


可以注意到几个比较重要的标签<div class="archive-detail">和子元素<h3>包含了抓取数据的链接和标题;<p>包含了抓取内容的简介。现在可以去刚才推荐的第二个网址内测试一下。当然也可以不测。



点击Fetch URL把抓取数据的网页地址复制进来。


在搜索框中输入dic.archive-detail



成功了,说明<div class="archive-detail">可以获取选择到我们需要的内容。


抓取网页数据最重要的就是去分析数据所在位置。其次就是用Jsoup的api去获取得到数据。那么接下来着手代码。


//获取抓取内容
    public void getSelectData(String url) throws IOException {
        Document doc = Jsoup.connect(url).timeout(60 * 1000)
                .userAgent("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0")
                .get();
        //实例div.archive-detail元素集合
        Elements links = doc.select("div.archive-detail");
        //遍历集合下<a>标签包含的href和title值
        for(int i=0;i<links.size();i++){
            Elements a = links.get(i).select("a");
            Log.i("shezhang","标题 = "+a.attr("title"));
            Log.i("shezhang","链接 = "+a.attr("abs:href"));
            //获取<p>标签包含的内容
            Elements p = links.get(i).select("p");
            Log.i("shezhang","简介 = "+p.text());
        }
    }

    private void findViewById(){
        btnTest = (Button) findViewById(R.id.btn_test);
        btnTest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(){
                    @Override
                    public void run() {
                        try {
                            for(int i=1;i<=30;i++){
                                try {
                                    Log.i("jiawei","第"+i+"页");
                                    getData(url+i);
                                    sleep(3000);
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }.start();
            }
        });
    }



 
 
 

代码很简单,过个过场。因为泡在网上的日子请求有时间限制,所有我的线程中睡3秒再继续请求下一页的内容 一共有30页。从刚才给出的泡在上网的日子的第一页网址可以看出只要改改最后那个页码就好哈哈。比较重要的就是getSelectData()中的获取数据的代码。

首先实例Document对象,然后获得主要元素

 Elements links = doc.select("div.archive-detail");

这个div就是包含了各个文章链接啊标题啊简介啊的部分,然后通过遍历这个div元素去获得我们想要的链接啊标题啊巴拉巴拉。先得到子元素

Elements h3 = links.get(i).select("a");

然后通过a元素去获得a里面的内容,包括链接啊标题啊。

Log.i("shezhang","标题 = "+h3.attr("title"));
Log.i("shezhang","链接 = "+h3.attr("abs:href"));

简介被包含在<p>标签中

<span style="font-size:18px;">Elements p = links.get(i).select("p");
Log.i("shezhang","简介 = "+p.text());</span>

OK!运行得到:



搞定!步骤还是挺简单的,社长写的内容呢比较粗略。代码粗略。图片粗略。。。。如果同学们项目需要用到的话,不妨把请求数据部分另外开个专门的类异步封装好点,把请求的数据封装成bean对象勉强就可以用啦。这里就做个简单例子,学习了基本用法的时候看一些案例可以加深理解。


                
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值