Android将网页做成app-- Jsoup网络解析框架
来源:互联网 发布:风暴英雄数据查询 编辑:程序博客网 时间:2024/06/06 20:42
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 { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv = (TextView)findViewById(R.id.tv); tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { new Thread(new Task()).start(); } }); } class Task implements Runnable { @Override public 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网络解析框架
- Android使用jsoup解析网页
- Android:使用jsoup解析网页
- Android开发---jsoup解析网页的使用方法
- android中使用JSOUP如何解析网页
- Android Jsoup与HttpClient网络爬虫解析
- Android网络数据解析之Jsoup
- 网页解析利器Jsoup
- 网页解析利器Jsoup
- Jsoup 解析Html网页
- Jsoup解析网页
- 网页解析之Jsoup
- jsoup解析网页二
- Jsoup解析网页内容
- 使用Jsoup解析网页
- Android App使用Jsoup抓取网页数据显示
- Android Jsoup网页爬虫—>程序猿面试指南App
- Jsoup解析网络xml
- Spring配置切面
- JAVA之ArrayList
- 回顾大一·C语言编程3.4(2)
- POJ 2996.Help Me with the Game
- jsp动态嵌入另一个jsp页面
- Android将网页做成app-- Jsoup网络解析框架
- Yii2.0的ActionFilter类详细解读
- OPENSTACK NETWORKING 概念
- BOM(浏览器对象模型)和DOM(文档对象模型)
- [js高手之路] html5 canvas系列教程
- 关于Python+Opencv实现人脸检测的实验笔记(调用摄像头篇)
- Python扩展方法一二事
- OpenGL从1.0开始-顶点数组简析
- JavaScript 面向对象编程