Android开发笔记:用Jsoup简单获取网页的数据

54 篇文章 16 订阅
订阅专栏

Android开发笔记:用Jsoup简单获取网页的数据

有时候我们在开发过程中,比如仿写一些app时,可能缺少相关的可用的接口给我们提供数据,这个时候据需要我们去网页去爬取一些数据。这个时候我们就可以使用一些开源库来帮助我们轻松地爬取数据。

Jsop开源库:

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

  • 主要功能:
    • 1.从一个URL,文件或字符串中解析HTML
    • 2.使用DOM或CSS选择器来查找、取出数据
    • 3.可操作HTML元素、属性、文本

Android Studio中的依赖:

org.jsoup:jsoup:1.13.1    

加载依赖后即可使用Jsouop库

Jsoup的一些常用操作:

  • 1.获取Html文档
    一般根据网页url开启链接获取即可,使用静态方法:

      Document doc = Jsoup.connet(url).connect();  
    

    Jsoup根据url开启链接并且返回一个Document实例,该示例相当于一个html文档,其
    中包含着网页的所有信息。接下来我们可以用这个Document实例来筛选出我们需要的内

  • 2.在Document实例中筛选Elements元素的方法,这里就不介绍用语法选择器筛选了(因为我也不会css和jQury的语法)

    • 1.根据Id筛选出一个Element:

      getElementById(String id)
      
    • 2.根据Tag标签筛选出Elements:

      getElementsByTag(String tag)      
      
    • 3.根据Class类筛选出Elements:

      getElementsByClass(String className)      
      
    • 4.根据属性筛选出Elements:

      getElementsByAttribute(String key)       
      
  • 3.获取内容:

    • 1.获取属性

      attr(String key)      
      
    • 2.获取所有属性

      attributes()   
      
    • 3.获取文本内容

      text()
      
    • 4.获取数据内容 (例如:script和style标签)

      data()                                   
      

一般的爬取过程:

这里我们以虎扑的网页版首页为例。

1.分析网页数据:

打开虎扑首页,在浏览器中按下F12即可打开网页的控制台,可以查看网页的HTML文档。
在这里插入图片描述

我准备爬取虎扑资讯中的每一项,并将其加载入一个RecycleView中。那么就需要分析我需要的数据:

  • 1.新闻项的缩略图
  • 2.新闻项的标题,即第一行加粗的文字
  • 3.新闻项的简介,即后面没加粗的正文部分

分析了我们需要的数据后,我们在控制台中手动筛选出我们需要的内容。
选中一个标签后,该标签包含的内容也会相应地在浏览器页面中显示出来:

我们就这样层层筛选出我们需要的元素,我们先筛选出每一条整体的数据:
在这里插入图片描述

可以看到,我们需要的所有数据项被包含在:

<div class="test-img-list-model infinite-container"> 

这一个上级标签中了,所以我们需要先筛选出这个大的上级标签。

然后,我们再获取每一个具体项中的数据:

可以看出,新闻项的缩略图被包含在:

<div class="list-img">
 <a href="https://bbs.hupu.com/56423571.html" target="_blank">
  <img src=https://i1.hoopchina.com.cn/bbs-editor-web/16683251359206.
  jpg?x-oss-process=image/resize,m_fill,w_132,h_88>
 </a>
</div>  

标签中

标题被包含在:

<div class="item-title-conent">
【字幕】东契奇:我会坚持信任队友 良好的休息很关键
</div>

正文被包含在:

 <div class="list-item-desc list-item-desc-has"> 
    <!-- -->
    东契奇赛后采访表示,信任队友是关键,即便他们投不进;这次休息得很好,打很
    久也不觉得累。
    <!-- --> 
</div>   

2.重点:Jsoup爬取数据项

首先由于需要联网,我们将网络权限给加上(很重要)
清单文件中加上:

    <uses-permission android:name="android.permission.INTERNET"/>

上边说道我们只爬取三个数据项,所以我们创建一个数据类,把三个数据组装到这个数据类的实例中:      

        public class NewsItem {
        public String img;//新闻缩略图的链接,待会用Glide加载进去  
        public String title;//新闻的标题
        public String content;//新闻的正文
        }

我打算用RecycleView将所爬取的数据项现实,所以先创建一个每一项的布局,因为是用约束布局做的,大概就长这样:
在这里插入图片描述

接下来创建适配器类:

  public class MyAdapter extends RecyclerView.Adapter<MyAdapter.
  ViewHolder> {

  private ArrayList<NewsItem> mList;

  public MyAdapter(ArrayList<NewsItem> mList){
      this.mList = mList;
   }

  @NonNull
  @Override
  public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.detail_item,parent,false);
    return new ViewHolder(view);
  }

  @Override
  public void onBindViewHolder(@NonNull ViewHolder holder, int 
  position) {
    NewsItem item = mList.get(position);
    holder.content.setText(item.content);
    holder.title.setText(item.title);
    Glide.with(holder.imageView).load(item.img).into(holder.imageView);
  }

  @Override
  public int getItemCount() {
     return mList.size();
  }

  public static class ViewHolder extends RecyclerView.ViewHolder{

    private ImageView imageView;
    private TextView title;
    private TextView content;

    public ViewHolder(View view){
        super(view);
        imageView = view.findViewById(R.id.imageView);
        title = view.findViewById(R.id.news_title);
        content = view.findViewById(R.id.news_content);
    }
  }
}            

最后是最重要的,获取数据的具体做法:
由于Android系统不允许我们在主线程中进行网络通信,所以我们开启一个线程,并
且在线程中进行Jsoup解析:

new Thread(new Runnable() {
@Override
public void run() {
  try {
  Document doc = Jsoup.connect("https://www.hupu.com/").get();

  //获取所有的新闻项
  Elements elements = doc.body().getElementsByClass("list-item");

  //遍历每一个新闻项,并筛选出需要的信息,组装成一个信息类,加入数组列表中   
  for (Element e:elements){
        NewsItem i = new NewsItem();
        String title = e.getElementsByClass("item-title-conent").
        first().text();
        String content = e.getElementsByClass("list-item-desc
         list-item-desc-has").text();
        String imgURL = e.getElementsByClass
        ("list-img").first().getElementsByTag("img").attr("src");
        i.content = content;
        i.img = imgURL;
        i.title = title;
        }
        //数据请求完毕,通知handle进行刷新UI
        Message message = new Message();
        message.what = 1;
        handler.sendMessage(message);
  } catch (IOException e) {
  e.printStackTrace();}
  }}).start();   
  • 这里先进行Jsoup.connect请求数据并通过get方法获取Document实例,对该示例进行筛选获取需要的数据。
  • 然后筛选出所有类名为list-item的元素(Elements),分析过滤可知每一个新闻项的类名即使list-item,所以这样筛选就获取了一个相当于是元素集合(Elements),集合中的每一个元素包含的数据就相当于是每一项的元素 :

在这里插入图片描述

  • 然后遍历每一个元素,筛选出标题,正文,缩略图 ,并将其包装成一个信息类,
    装入一个List之中并传入RecycleView的适配器中。

Activity中的完整代码:

public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
MyAdapter adapter;

Handler handler = new Handler(Looper.getMainLooper()){
    @Override
    public void handleMessage(@NonNull Message msg) {
        switch (msg.what){
            case 1:
                adapter.notifyDataSetChanged();
                break;
            default:
                break;
        }
    }
};

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    recyclerView = findViewById(R.id.recyclerView);
    ArrayList<NewsItem> list = new ArrayList<>();
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Document doc = Jsoup.connect("https://www.hupu.com/").get();

                //获取所有的新闻项
                Elements elements = doc.body().getElementsByClass
                ("list-item");

                //遍历每一个新闻项,并筛选出需要的信息,组装成一个信息
                类,加入数组列表中
                for (Element e:elements){
                    NewsItem i = new NewsItem();
                    String title = e.getElementsByClass
                    ("item-title-conent").first().text();
                    //Log.d("test",title);
                    String content = e.getElementsByClass
                    ("list-item-desc list-item-desc-has")
                            .text();
                    //Log.d("test",content);
                    String imgURL = e.getElementsByClass
                    ("list-img").first().getElementsByTag("img")
                            .attr("src");
                    //Log.d("test",imgURL);
                    i.content = content;
                    i.img = imgURL;
                    i.title = title;
                    list.add(i);
                }
                //数据请求完毕,通知handle进行刷新UI
                Message message = new Message();
                message.what = 1;
                handler.sendMessage(message);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }).start();
    adapter = new MyAdapter(list);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setAdapter(adapter);
 }
}

最后即可获得一排简略的信息:
在这里插入图片描述

我的Android笔记(八)—— 使用Jsoup解析Html
张新强的CSDN博客
03-18 4万+
想要做一个看新闻的应用,类似Cnbeta客户端的东西。大致思路如下:根据链接获取新闻列表页的html代码,然后解析,找到所有的新闻标题和新闻链接用listView显示,当点击ListView的Item再加载相应的新闻内容。 其中获取html代码,可以使用如下代码实现: public String getHtmlString(String urlString) { try {
Android基于Jsoup的网络爬虫,移动客户端开发工程师专业
m0_66264169的博客
02-02 521
Jsoup主要有以下功能: 从一个字符串、文件或者一个 URL 中解析HTML 提供一系列方法对HTML进行数据抽取 对HTML元素、属性、文本进行操作 消除不受信任的HTML (来防止XSS攻击) 简言之,安卓跟web爬虫基本上没什么区别,都是通过请求获得响应。Android返回的是json格式的字符串,web返回的是页面,通过Jsoup我们可以方便的对网页数据进行操作。 三、Jsoup的配置 首先在Jsoup官网 https://jsoup.org/download 下载对应的j
Android获取网页内容(HTTP)
07-30
Android获取网页内容,利用GET方法请求图书馆查询输入框,解析返回的HTML代码,并将查询结果放入ListView之中显示。
Android开发系列十:使用Jsoup解析HTML页面
weixin_33737134的博客
12-06 227
Android开发系列十:使用Jsoup解析HTML页面 在写Android程序时,有时需要解析HTML页面,特别是那类通过爬网站抓取数据的应用,比如:天气预报等应用。如果是桌面应用可以使用htmlparser这个强大的工具,但是在Android平台上使用会出现错误;另一种办法是使用正则表达式来抽取数据;再有一个办法是纯字符串查找定位来实现。文本将要介绍的是使用Jsoup...
Java网络爬虫——jsoup快速上手,爬取京东数据。同时解决‘京东安全’防爬问题
最新发布
m0_59598029的博客
08-22 2512
网络爬虫,就是在浏览器上,代替人类爬取数据Java网络爬虫就是通过Java编写爬虫代码,代替人类从网络上爬取信息数据。程序员通过设定既定的规则,让程序代替我们从网络上获取海量我们需要的数据,比如图片,企业信息等。爬虫的关键是对于网页信息的解析。jsoup是一个用于处理现实世界HTML的Java库。它提供了一个非常方便的API,用于获取URL以及提取和操作数据,使用最好的HTML5DOM方法和CSS选择器。
android 获取网页内容
Jinda的博客
04-28 1160
1. AndroidManifest.xml加入权限: Android:name="android.permission.ACCESS_NETWORK_STATE" /> 2. android3.0以上凡是涉及到网络,下载等耗时操作,都不能在主线程中运行,不允许直接在ui线程直接操作httpClient 所以方法一:另起线程去访问。 方法二:如果不想另起
android 获取页面信息,android 获取网页内容
weixin_39805255的博客
05-28 1060
1. AndroidManifest.xml加入权限:/>2.android3.0以上凡是涉及到网络,下载等耗时操作,都不能在主线程中运行,不允许直接在ui线程直接操作httpClient所以方法一:另起线程去访问。方法二:如果不想另起线程,加上以下代码,可以取消严格限制StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.B...
Android基于Jsoup的网络爬虫
disrm84160的博客
04-12 725
Android返回的是json格式的字符串,web返回的是页面,通过Jsoup我们可以方便的对网页数据进行操作。这里主要的分析网站是https://www.zhihu.com/topic/19550874/hot。其次是数据的展示,将数据放在listView中即可,如果要加入下拉刷新或者上滑加载则需要额外的工作。Elements这个对象提供了一系列类似于DOM的方法来查找元素,抽取并处理其中的数据。1.根据想要获取的资源,利用浏览器自带的审查元素功能(F12)获得想要的资源。
Android网络爬虫程序(基于Jsoup
热门推荐
神奕的专栏
01-24 1万+
Android网络爬虫程序(基于Jsoup) 摘要:基于 Jsoup 实现一个 Android网页抓取程序,抓取页面的内容并显示出来。写这个程序的主要目的是抓取海投网的宣讲会信息(公司、时间、地点)并在移动端显示,这样就可以随时随地的浏览在学校举办的宣讲会信息了。 一、Jsoup简介 Jsoup 是一个 Java 的开源HTML解析器,可直接解析某个URL地址、HTML文
黑大助手后端和Android开发笔记
classTC的博客
03-13 2389
黑大助手 的功能:黑大助手是一款为黑龙江大学在校学生服务的 Android 端应用,提供 查课表,查成绩,查考试,问答社区以及获取校内最新资讯的功能。 下面开始整理整个项目从构思到完成这个过程的一些学习经历由于学校官方移动应用 i黑大实在太难用,而且数据更新不及时,消息推送不及时,所以想着自己写一个应用,可以查看一些学生信息,比如课程表,成绩表,考试安排等信息,思路还是比较简单的,就是
Android开发简单获取网页数据
05-06
我测试了,好使的。 android获取数据,这个网页可以是aspx,也可以是php。简单的实现少量数据传递。手机获取网页数据,adroid获取C#页面数据传递也是都可以。
android获取网页内容
12-11
android获取网页内容,直接获取网页的详细内容
android使用jsoup 解析html文件
08-22
使用android解析html文档,替换html中的内容
Android获取网页中的指定内容源码
03-21
得到网页中的代码,再通过jsoup进行解析和遍历以得到指定的内容。 里面包含了jsoup-1.7.2.jar。该程序是基于android4.0下编写的。欢迎大家提出建议。
Android项目获取网页信息的三种方法
qq_42024030的博客
06-23 2622
Android项目获取网页信息的三种方法:jsoup,url,get表单
android 使用jsoup
weixin_43492777的博客
09-05 781
implementation 'org.jsoup:jsoup:1.10.2' package com.app.javahttp; import android.util.Log; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import java.io.IOException; import java.net.A...
android中使用httpclient方法获得网页内容并对json对象解析
老檀的专栏
10-26 4884
摘要:android中使用httpclient的get和post方法获取网络的内容,并将获取的json对象解析成部分,用于制作使用到网站已有信息的android应用。 学习自极客学院android视频,《数据存储》章中《操作JSON数据》,《网络通信》章中《异步任务》和《基于http通信》。Java学的太渣,很多专业名词还说不明白,学HttpClient是因为学习经过用到了从Php后台接口接受J
Jsoup实战:解析与抓取网页数据详解
9. **实际应用**:Jsoup广泛应用于Android开发,尤其是在Webview组件中需要与网页交互或提取网页信息的场景。它也适用于爬虫项目,帮助开发者高效地抽取和处理网页数据Jsoup提供了一种简洁且强大的方式来处理...
写文章

热门文章

  • EventBus(事件总线)的使用和源码的简单解析 6234
  • Android系统的启动过程(三):Launcher启动过程 4793
  • 开源库源码分析:Okhttp源码分析(一) 4261
  • Android开发笔记:使用Activity Result API 清爽地请求权限 和 启动Activity 3460
  • Android进阶 View事件体系(三):典型的滑动冲突情况和解决策略 3324

分类专栏

  • Java学习笔记 16篇
  • 通工-数据结构与算法C 7篇
  • Android开发笔记 54篇
  • Kotlin学习笔记 13篇

最新评论

  • Java:动态代理

    CSDN-Ada助手: Java 技能树或许可以帮到你:https://edu.csdn.net/skill/java?utm_source=AI_act_java

  • Android开发笔记:使用Activity Result API 清爽地请求权限 和 启动Activity

    青女染寒酥: 有直接调用相册的吗?

  • Retrofit入门使用

    往前狂奔的Stephen: 一直做本地系统应用开发,想学学网络请求的,这是唯一一篇看完能看懂的博客表情包

  • Android进阶 四大组件的工作过程(四):ContentProvider的工作过程

    shmdfsj: 狠狠点赞了,感谢解答,如果能再把content provider进程存在的启动流程加上,那简直完美了!!!不过已经很棒了

  • Android进阶 四大组件的工作过程(四):ContentProvider的工作过程

    Tai_Monster: 我看了一下源码,这个holder实现了Parcelable接口,简单来说就是用来进行进程间通信的一个中间件。因为Content Provider设计出来的一个天生特性就是可以用来进行跨进程的数据交互

大家在看

  • Base64编码和解码原理及代码分析 342
  • 基于ssm+vue.js的毕业生学历证明系统附带文章源码部署视频讲解等 885
  • 基于ssm+vue.js的二手车交易网站附带文章源码部署视频讲解等 1072

最新文章

  • Java:动态代理
  • 最长回文子串:动态规划推导
  • 后端学习笔记:Python基础
2024年7篇
2023年59篇
2022年22篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳坪山网站建设公司标题优化网站怎样对网站进行内外部优化三穗县分类网站优化龙华seo网站优化多少钱网站排名优化 必宙l思方法孝感工厂网站优化价格企业网站如何做好优化武汉网站内部优化容桂网站优化平台网站优化的常用方法快速的网站排名优化北京网站优化托管苏州网站优化价格web网站性能优化黔东南网站优化价格seo优化网站排名哪家好都江堰市网站优化网站优化不见效果泰安模板网站优化黄石网站关键字优化网站搜索优化有这云速捷高明搜索引擎的网站优化思路兴山宜昌网站建设优化公司网站前台优化注意事项湛江首页网站关键词优化技巧安阳企业网站优化平台网站SEO优化和百度竞价宁波网站排名快速优化企业网站优化服务报价天门网站seo优化公司香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化