Android自由开发者 通过Jsoup抓取网页数据

来源:互联网 发布:开启手机休眠关闭网络 编辑:程序博客网 时间:2024/05/16 16:20

      现在网上流行了一种自由开发者的风气;就是自己私下写一个简易的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>数据了;

最后特此声明:用了泡在网上的日子的数据;



文/lieco(简书作者)
原文链接:http://www.jianshu.com/p/7d658636764a
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
0 0
原创粉丝点击