Android将网页做成app– Jsoup网络解析框架
Jsoup能够获得网页数据,而我们在制作app的数据来源为一些公开网站,比如;干活集中营,豆瓣,知乎之类的。不过目前主流框架模式是Retrofit&RxJava。然而这种方法局限性很大,主要获取的数据都是很规范的,不能随意获得对应网页任意的数据。

我们使用Jsoup做app时,需要对照网站源码来做,这样能够让我们快速获得自己想要的数据。

首先做一下准备工作,打开网页https://xjh.haitou.cc/wh/uni-1/after/hold/page-1,我们使用浏览器的开发者模式

我们可以看到一行代码对应网页中的位置,这样方便我们写程序。

我首先放出完整代码,然后再一步一步的讲解
添加依赖

compile 'org.jsoup:jsoup:1.9.2'

代码

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView tv = (TextView)findViewById(R.id.tv);tv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {new Thread(new Task()).start();}});}class Task implements Runnable {@Overridepublic void run() {Log.v("test","start");String url = "http://xjh.haitou.cc/wh/uni-1/after/hold/page-1/";Connection conn = Jsoup.connect(url);// 修改http包中的header,伪装成浏览器进行抓取conn.header("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:32.0) Gecko/    20100101 Firefox/32.0");Document doc = null;try {doc = conn.get();} catch (IOException e) {e.printStackTrace();}// 获取tbody元素下的所有tr元素Elements elements = doc.select("tbody tr");for(Element element : elements) {String companyName = element.select("div.company").first().text();//String companyName = element.select("td.cxxt-title").first().text();String time = element.select("td.text-left").first().text();String address = element.select("td.text-ellipsis").first().text();Log.v("test","---------------------------------");Log.v("test","公司:"+companyName);Log.v("test","宣讲时间:"+time);Log.v("test","具体地点:"+address);Log.v("test","---------------------------------");}Log.v("test","end");}}
}

首先从网页获取数据,是属于网络操作必须另起一个线程运行代码,

conn.header("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:32.0) Gecko/    20100101 Firefox/32.0");
Document doc = null;

然后这个伪装成浏览器这步,基本成惯例,代码看起来是伪装成火狐浏览器。

            try {doc = conn.get();} catch (IOException e) {e.printStackTrace();}// 获取tbody元素下的所有tr元素Elements elements = doc.select("tbody tr");

这个获得Elements元素,这个在网页开发者模式里可以看到tr这个标签代表着一条宣传会信息,其中有公司名,举办地点,举办时间等等。这个tbody是它自定义的标签,所以很好找,这个tbody在网站源代码就一个,所以能够确定唯一性。对于select函数唯一性很重要,然后它空了一行加tr,这说明是在找tbody标签的所有的tr标签。

for(Element element : elements) {String companyName = element.select("div.company").first().text();//String companyName = element.select("td.cxxt-title").first().text();String time = element.select("td.text-left").first().text();String address = element.select("td.text-ellipsis").first().text();Log.v("test","---------------------------------");Log.v("test","公司:"+companyName);Log.v("test","宣讲时间:"+time);Log.v("test","具体地点:"+address);Log.v("test","---------------------------------");
}

这就是一个tr一个tr的解析获得数据。这里可以看到select函数的另一个用法,通过 标签名+.+类名 来获得一个元素,这个很重要,后来获得最终的数据都是使用这个函数。

获得数据如下
09-28 13:16:20.736 22136-22310/zzw.myapplication V/test: start
09-28 13:16:27.006 22136-22310/zzw.myapplication V/test: ———————————
09-28 13:16:27.006 22136-22310/zzw.myapplication V/test: 公司:深圳市星河互动科技有限公司
09-28 13:16:27.006 22136-22310/zzw.myapplication V/test: 宣讲时间:2017-09-28 14:00 (今天)
09-28 13:16:27.006 22136-22310/zzw.myapplication V/test: 具体地点:华科1号楼2楼报告厅
09-28 13:16:27.006 22136-22310/zzw.myapplication V/test: ———————————
09-28 13:16:27.006 22136-22310/zzw.myapplication V/test: 公司:深圳中兴飞贷金融科技有限公司

还有很多就不贴出来了

想要掌握Jsoup其实很简单,毕竟使用的函数很少,过程都是固定的。

目前到此结束了,其实这距离做成app,还需要形成实体类,然后填充数据,界面完成。不过我不搞了,接下来大家自由发挥,换一个自己想做的网站,比如:B站
下期再见。

Android将网页做成app-- Jsoup网络解析框架相关推荐

  1. Android肝帝战纪之网络请求框架封装(Retrofit的封装)

    网络请求框架封装(OkHttp3+Retrofit+loading的封装) Retrofit的Github链接 点此链接到Github AVLoadingIndicatorView的Github链接( ...

  2. Android之封装好的异步网络请求框架

    1.简介  Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnection,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使 ...

  3. android 设置允许http请求_网络请求框架----OkHttp原理

    一.前言 在 Android 中,网络请求是一个必不可少的功能,因此就有许多代表网络请求客户端的组件库,具有代表性的有下面三种: Apache 的 HTTP 客户端组件 HttpClient. Jav ...

  4. 网络爬虫框架cetty的实现

    网络爬虫框架cetty的实现 功能介绍 maven配置 简单demo的实现 提供能力 关于demo的github地址如下 功能介绍 基于完全自定义事件处理机制的爬虫框架 模块化的设计,提供强大的可扩展 ...

  5. 菜鸟裹裹App分析系列-UI框架设计分析

    前两天分析了菜鸟裹裹的具体业务,菜鸟裹裹能够成功快递行业的王牌产品,业务当然是非常重要的一环,不过App的操作体验,以及能够让用户使用上更加方便快捷,也是成功的重要因素,所以这次就来分析菜鸟裹裹的UI ...

  6. Android 开源1:获取并解析网页信息(Jsoup)

    Android 开源1:获取并解析网页信息(Jsoup) Android 开源1获取并解析网页信息Jsoup 一程序功能 二程序界面 三程序知识点与创新点 四 总结 一.程序功能 本款APP主要是通过 ...

  7. Android登录客户端,验证码的获取,网页数据抓取与解析,HttpWatch基本使用

    大家好,我是M1ko.在互联网时代的今天,如果一个App不接入互联网,那么这个App一定不会有长时间的生命周期,因此Android网络编程是每一个Android开发者必备的技能,博主是在校大学生,自学 ...

  8. Android应用安全开发之浅谈网页打开APP

    一.网页打开APP简介 Android有一个特性,可以通过点击网页内的某个链接打开APP,或者在其他APP中通过点击某个链接打开另外一个APP(AppLink),一些用户量比较大的APP,已经通过发布 ...

  9. Android 通过网页打开自己的APP(scheme)

    Android 通过网页打开自己的APP(scheme) 分类: android2014-07-09 17:35 8565人阅读 评论(2) 收藏 举报 通过用手机的浏览器(内置,第三方都可)访问一个 ...

最新文章

  1. linux7设置时间,CentOS 7 设置日期和时间
  2. mysql 提交_MySQL 事务提交过程
  3. Golomb及指数哥伦布编码原理介绍及实现
  4. 小米wifi每天晚上准时断网_小米路由器遭恶意抹黑 官方回应:抵制这种下三滥...
  5. JSON JsonArray和JsonObject学习资料
  6. php7 imagick安装,php扩展imagick安装for windows7
  7. P6378-[PA2010]Riddle【2-SAT】
  8. 修改itunes备份路径的方法(奇奇怪怪的文件堆积C盘,别让文件成为最后的稻草哦)
  9. 马哥Linux2016最新高薪运维视频课程
  10. 在开源UOJ的导航栏中添加新页面链接
  11. STM32-关于Proteus 仿真无法运行STM32CubeMX自动生成的代码
  12. Java 程序开发设计文档
  13. [渝粤教育] 南京审计大学 审计学基础 参考 资料
  14. Python案例 计算 S=1-3+5-7+9-11+…+n,计算n=100001或n=10000001时的和。
  15. PyTorch Python API:FX || Intro
  16. Linux ssh登陆命令
  17. PhaserTape:把智能手机变成测距仪
  18. 一个老程序员的一些职场经验分享
  19. VFP 二维数组声明和ALEN() ASCAN() AFIELD() ADEL()函数
  20. 视网膜血管分割方法整理

热门文章

  1. 加密之SSL和单双向认证
  2. 贪心算法解决最优装载问题c语言,贪心算法解决最优装载问题
  3. 大话Mysql三:mysql 备份恢复之 物理备份与逻辑备份的区别比较
  4. 八大排序算法---快速排序原理及代码
  5. pgpool mysql_pgpool 简明使用教程
  6. 大数据、人工智能、云计算知识概括
  7. C/C++ 之 printf 输出函数的使用
  8. CSS学习 | 《CSS揭秘》读书笔记——第一章
  9. 魔云微型服务器加硬盘,ORICO魔云
  10. 基于深度学习的道路交通标志数字识别