You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用中使用Jsoup库获取p元素值的问题排查

问题解决:Android中使用Jsoup获取HTML的p元素值失败

问题分析

你的代码存在两个核心问题:

  1. 选择器匹配不准确:目标HTML里两个div的class属性有细微差异(第一个多了一个空格),用精确的div[class=xxx]选择器会导致匹配范围受限,且两次选择的是同一个元素集合,最终stringKisa和stringUzun会得到相同的拼接文本(比如"32 66")。
  2. 未单独提取目标元素:直接调用elements.text()会把所有选中的p元素文本拼接在一起,无法分别获取两个独立的p值。

解决方案

方案1:利用唯一ID直接定位(推荐)

因为目标p元素有唯一的id属性,直接通过ID选择器定位是最精准的方式:

private class siraBilgileri extends AsyncTask<Void, Void, Void> {
    String URL = "https://www.********.com";
    String stringKisa, stringUzun;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... voids) {
        org.jsoup.nodes.Document document = null;
        try {
            document = Jsoup.connect(URL).get();
            // 通过ID直接获取对应p元素的文本
            stringKisa = document.select("#sehiricino").text();
            stringUzun = document.select("#sehirdisino").text();

        } catch (IOException e) {
            e.printStackTrace();
            // 异常时给变量赋默认值,避免TextView显示null
            stringKisa = "获取失败";
            stringUzun = "获取失败";
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void unused) {
        super.onPostExecute(unused);
        tvKisaSonuc.setText(stringKisa);
        tvUzunSonuc.setText(stringUzun);
    }
}

方案2:修正class选择器并按位置提取

如果无法使用ID,可通过更宽松的class选择器匹配,再按索引提取对应元素:

private class siraBilgileri extends AsyncTask<Void, Void, Void> {
    String URL = "https://www.********.com";
    String stringKisa, stringUzun;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... voids) {
        org.jsoup.nodes.Document document = null;
        try {
            document = Jsoup.connect(URL).get();
            // 用宽松的class选择器匹配所有符合条件的div下的p元素
            Elements pElements = document.select("div.row div.col-6.text-center p.no");
            // 按索引提取第一个和第二个p元素的文本
            if (pElements.size() >= 2) {
                stringKisa = pElements.get(0).text();
                stringUzun = pElements.get(1).text();
            } else {
                stringKisa = "数据缺失";
                stringUzun = "数据缺失";
            }

        } catch (IOException e) {
            e.printStackTrace();
            stringKisa = "获取失败";
            stringUzun = "获取失败";
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void unused) {
        super.onPostExecute(unused);
        tvKisaSonuc.setText(stringKisa);
        tvUzunSonuc.setText(stringUzun);
    }
}

额外注意事项

  • 确保网络权限已在AndroidManifest.xml中声明:<uses-permission android:name="android.permission.INTERNET" />
  • 若目标网站有反爬机制,可能需要在Jsoup请求中添加User-Agent头:Jsoup.connect(URL).userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36").get();

内容的提问来源于stack exchange,提问作者Ceyhun YILDIZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 10:12:20