首页 > 技术文章 > Android Studio下的简单网页解析

soreaK 2020-05-27 22:10 原文

Android Studio下的简单网页解析

一.导入数据

导入前添加依赖
implementation 'org.jsoup:jsoup:1.11.3'
使用字符串导入
String html = "<html><head><title>这是一个title</title></head>"
+"<body><p>这里是一个html里的内容</p></body></html>";
Document document = Jsoup.parse(html);
从网址导入

导入okhttp3依赖

dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.squareup.okhttp3:okhttp:4.6.0'
    }

通过URL来获取网页文本数据

public static String getHtml() throws Exception {
        OkHttpClient okHttpClient;
        okHttpClient=new OkHttpClient();
        Request request = new Request.Builder()
            //	.addHeader()    <---在这个里面加Cookie,Host等
                .url("https://www.baidu.com")
                .build();

        Response response = okHttpClient.newCall(request).execute();
        String result = response.body().string();
        return result;

    }

然后直接调用

Document document = Jsoup.parse(getHtml());
从文件中导入
String html = ReadFile.readToString("HTML文本.html");
Document document = Jsoup.parse(html);

二.数据解析

将Document类型的数据转化为Element类型
Element mElement = document.body(0);

这句话的意思在document里寻找到 <body> 标签,以Element类型返回里面的内容(包括<body>)

如果你需要获取的数据不存放在<body>里,则使用以下几种

1.getElementsByTag--->通过标签名寻找

例:寻找第一个<table>标签

Element mElement = document.getElementsByTag("table").eq(0).get(0);

2.getElementById--->通过ID寻找

例:寻找id="student"的标签

Element mElement = document.getElementsById("student").get(0);

3.getElementsByClass--->通过Class属性寻找

例:寻找Class="test"的标签

Element mElement = document.getElementsByClass("test").get(0);

4.getElementsByAttributeValue--->通过标签属性寻找

例:寻找Class="test"的标签

Element mElement = document1.getElementsByAttributeValue("Class","test").get(0);

三.数据处理

Element--->String

mElement.text()
//或者↓
mElement.html()

不同的是test返回的是标签里的内容,html返回的是html的格式的文本

例如下面

public static void getStr() throws Exception {
        OkHttpClient okHttpClient;
        okHttpClient = new OkHttpClient();
        Request request = new Request.Builder()
                .url("https://www.baidu.com")
                .build();

        Response response = okHttpClient.newCall(request).execute();
        String result = response.body().string();
        Document document = Jsoup.parse(result);
        String s1 = document.getElementsByTag("noscript").text();
        String s2 = document.getElementsByTag("noscript").html();

        System.out.println("test()返回的:"+s1+"\n");
        System.out.println("html()返回的:"+s2);

    }

返回的结果:

使用字符串方法来处理数据

字符串切割

String.split("\\s+");

根据下标切割字符串

String.substring(0,string.length()-1);

删除前后空格

String.trim();

字符串的内容替换

String.replace("原来的内容","替换的内容");

字符串类型的转化

int.toString;
//或者↓
String.valueof(int);

判断是否存在特定字

String.contains("特定字");

判断是否为空

String.isEmpty();

推荐阅读