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'打印出来结果是![]()