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

使用JSoup解析站点HTML提取链接失败的问题求助

问题排查&解决方案

  • 第一类问题:第一版目标HTML存在明显的标签不闭合错误,比如<a href="#" rel="29" data-video="example.com">Xstreamcdn</div>这类代码,a标签内直接出现了无对应开标签的div闭标签,Jsoup解析不规范HTML时可能会截断结构,导致选择不到对应a标签。
  • 第二类问题:你当前的代码没有做非空判断,getElementsByClass返回的是多元素集合,如果站点反爬拦截、返回的HTML结构发生变化,会直接触发空指针异常。
  • 第三类问题:你补充的第二版HTML结构和第一版完全不同,链接存储在li标签的data-vs属性中,不是a标签的data-video属性,需要对应修改选择器逻辑。
  • 第四类通用问题:Jsoup默认请求没有携带浏览器UA等头信息,很多站点会判定为爬虫返回空页面/错误页面,导致无法匹配到目标元素。

针对第一版带anime_muti_link类的HTML修正代码

try {
    Document doc = Jsoup.connect(URL)
            // 模拟安卓Chrome浏览器UA,规避基础反爬拦截
            .userAgent("Mozilla/5.0 (Linux; Android 10; SM-G975F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.120 Mobile Safari/537.36")
            .get();
    // 先定位目标容器,非空判断避免崩溃
    Element linkContainer = doc.selectFirst(".anime_muti_link");
    if (linkContainer == null) {
        Log.e("CALLING_URL", "未找到链接容器,可打印doc.html()检查返回的页面是否正常");
        return;
    }
    // 仅选择带data-video属性的a标签,过滤无效元素
    Elements links = linkContainer.select("a[data-video]");
    for (Element link : links) {
        String videoUrl = link.attr("data-video").trim();
        if (!videoUrl.startsWith("http")) {
            // 如果是//开头的协议相对地址用https:拼接,纯域名则加https://
            videoUrl = videoUrl.startsWith("//") ? "https:" + videoUrl : "https://" + videoUrl;
        }
        arrayList.add(videoUrl);
    }
    Log.d("CALLING_URL", "提取到的链接:" + arrayList);
} catch (IOException e) {
    Log.e("CALLING_URL", "页面请求失败:" + e.getMessage());
    e.printStackTrace();
}

针对第二版带servers类ul的HTML修正代码

try {
    Document doc = Jsoup.connect(URL)
            .userAgent("Mozilla/5.0 (Linux; Android 10; SM-G975F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.120 Mobile Safari/537.36")
            .get();
    Element serverList = doc.selectFirst("ul.servers");
    if (serverList == null) {
        Log.e("CALLING_URL", "未找到服务器列表容器");
        return;
    }
    Elements serverItems = serverList.select("li[data-vs]");
    for (Element item : serverItems) {
        String videoUrl = item.attr("data-vs").trim();
        arrayList.add(videoUrl);
    }
    Log.d("CALLING_URL", "提取到的链接:" + arrayList);
} catch (IOException e) {
    Log.e("CALLING_URL", "页面请求失败:" + e.getMessage());
    e.printStackTrace();
}

内容的提问来源于stack exchange,提问作者Meggan Sam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:36:08