jsoup

1.jsoup介绍

很多时候,我们需要从各种网页上面抓取数据,而jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

jsoup官方文档
https://jsoup.org/cookbook/
中文文档
http://www.open-open.com/jsoup/

2.使用场景

当我们安卓中做一些关于天气的数据或者对一些html中数据的获取时,我们就需要用到jsoup

下面是一张关于北京天气的截图,可以留意到这是一个html网页,当我们想要抓取里面的数据的时候,jsoup就能帮到我们很多。


接下来开始手把手教学

首先,也是很重要的一步,就是下载jar包,丢到libs里面

jar包下载地址
http://jsoup.org/download

Android studio玩家可以不下载jar包,在Gradle里面加入

dependencies {
    compile 'org.jsoup:jsoup:1.9.2'
}
  • 然后,找到你心仪的网页去抓取数据

这里我们我继续使用美食的网页,然后右键查看网页源码,或者按F12,接下来可以看到一大堆标签:


找到自己需要的就用我们获取当天的他的天气温度等数据,可以看到"14日(今天)"是放在<div id="7d" class="c7d">为节点的<h1>14日(今天)</h1>中,要获取"14日(今天)"我们可以这样写

try {
    Document doc = Jsoup.connect("http://www.weather.com.cn/weather/101010100.shtml").get();
    Elements elements = doc.select("div.c7d");
    Log.d("h1",elements.select("h1").get(0).text());
    } catch (IOException e) {
       e.printStackTrace();
    }
然后就是要获取他的天气情况他也是放在 <div id="7d" class="c7d">节点下的<p class="wea" title="阴转阴,山区有阵雨">中我们代码可以写成这样:

 try {
                    Document doc = Jsoup.connect("http://www.weather.com.cn/weather/101010100.shtml").get();
                    Elements elements = doc.select("div.c7d");
                    Log.d("h1",elements.select("p").attr("title"));
                } catch (IOException e) {
                    e.printStackTrace();
                }
在就是一个温度的最大最小值他也是放在<div id="7d" class="c7d">节点下的<span>29℃</span>/和<i>20℃</i>中代码是:
 try {
                    Document doc = Jsoup.connect("http://www.weather.com.cn/weather/101010100.shtml").get();
                    Elements elements = doc.select("div.c7d");
                    Log.d("max",elements.select("span").get(0).text());
                    Log.d("min",elements.select("i").get(0).text());
                } catch (IOException e) {
                    e.printStackTrace();
                }
在然后就是给他们综合:
try {
    Document doc = Jsoup.connect("http://www.weather.com.cn/weather/101010100.shtml").get();
    Elements elements = doc.select("div.c7d");
    String riqi = elements.select("h1").get(0).text();
    String wea = elements.select("p").attr("title");
    String max = elements.select("span").get(0).text();
    String min = elements.select("i").get(0).text();
    Log.d("kk","时间:" + riqi + "\r\n" + "天气" + wea + "\r\n" + "最高温度" + max + "\r\n" + "最低温度" + min);
} catch (IOException e) {
    e.printStackTrace();
}

我们也可以用TextView接收因为是在子线程中所以要做修改:
runOnUiThread(new Runnable() {
    @Override
    public void run() {
        text.setText("时间:" + riqi + "\r\n" + "天气" + wea + "\r\n" + "最高温度" + max + "\r\n" + "最低温度" + min);
    }
});

然后我们也可以结合下Logger日志打效果
首先添加一个Logger的依赖:
 
 
compile 'com.orhanobut:logger:1.15'
打印出来结果是

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值