Android自由开发者 通过Jsoup抓取网页数据
现在网上流行了一种自由开发者的风气;就是自己私下写一个简易的app上传到github上;可以以此项目作为开源;同时熟悉git操作;但是很多时候我们都需要一些数据来呈现在app中;如图片列表,如文字+图片列表;网上有很多开放式的api可以调用,如百度api、http://gank.io/api(干货集中营api);如果你现在想弄自己的一套数据,想把一些网站的数据整合过来使用,那就需要去抓取某些网页中的特定数据;
我们是通过Jsoup来抓取数据的;jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容;
关于Jsoup的介绍,请访问Jsoul的官网:http://jsoup.org/
关于Jsoup的jar包下载地址:http://jsoup.org/download
关于Jsoup的官网API文档查询:http://jsoup.org/apidocs/
这里:http://www.open-open.com/jsoup/
AndroidStudio中把jar包放入libs文件下;右键add as a libr...后就可以使用了;废话不多说,这里就是讲怎么通过Jsoup去抓取网页特定数据;
比如这里我们需要抓取泡在网上的日子中安卓开发里面文章的标题+图片+详情链接;
直接右键显示网页源码(或者F12);我们可以看到很多HTML+CSS标签等;
我们直接在里面快速找到我们需要的标题(如:Realm for Android快速入门教程、Android 6.0状态栏使用灰色文字和图标);之后我们需要分析是从什么节点开始才是一条数据;就好比数组[{},{}]一样;里面每个数据都是以什么开头的;这里我们分析之后可以看到是以<div class="archive-list-item">为节点就是一条数据;我们需要的详情连接是在<div class="archive-list-item">层下第一个标签<a href>中;图片地址是在第二个标签<img>中, 我们需要的标题是在<div class="post-intro">层下的子标签里面;
我们所需要的东西已经找到;接下来我们去抓取出数据封装一下就可以用了;
代码如下:
可以看到先是通过Jsoup.connect(url).get();获取一个Document;这样我们就可以通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据;首先解析我们上面说的节点<div class="archive-list-item">会得到一个Elements 通过for循环;我们在循环中取我们需要的数据;看代码可以发现Elements的两个属性select和attr;select可以认为是提取<XXX这种标签;attr可以是认为提取XXX的内容;如:e.select("img").attr("src")) 就是提取标签img下面的src对应的内容;我们运行打印一下数据可以看到下面的结果:
可以看到我们需要的数据已经打印出来了;
接着我们就是接收跟封装数据了,毕竟我们习惯了后台服务器返回的那种json数据;接下来写一个简易的Bean类如下:
里面序列化的代码没截全;把上面代码改下改掉;顺便加上分页功能:
这样我们就能愉快地使用List<Object>数据了;
最后特此声明:用了泡在网上的日子的数据;