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

使用Jsoup爬取视频链接时如何为数组中缺失https的字符串补全前缀?

问题根源

你当前将所有提取到的视频链接用换行符拼接为一个完整字符串后,仅对整个字符串的开头做了前缀判断,因此只能补全第一条链接的https,后续链接完全没有被处理到。同时原来的判断逻辑!linksStr.startsWith("https://")存在风险:如果网站返回的是http开头的正常链接,也会被错误拼接前缀。

修复方案

推荐优先在提取单个链接时就做前缀补全,逻辑更简洁效率更高,修改后的完整代码如下:

new Thread(() -> {
    final StringBuilder jsoupStr = new StringBuilder();
    String URL = "https://example.com" + titleString
            .replaceAll(":", "")
            .replaceAll(",", "")
            .replaceAll(" ", "-")
            .toLowerCase();

    Log.d("CALLING_URL", " " + URL);

    try {
        Document doc = Jsoup.connect(URL).get();
        Element content = doc.getElementById("list-eps");
        Elements links = content.getElementsByTag("a");
        for (Element link : links) {
            // 单条链接提取后直接处理前缀
            String videoUrl = link.attr("player-data").trim();
            if (videoUrl.startsWith("//")) {
                videoUrl = "https:" + videoUrl;
            }
            jsoupStr.append("\n").append(videoUrl);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    String linksStr = jsoupStr.toString().trim();
    // 原来的全局前缀补全逻辑可以直接删除
    String[] links_array = linksStr.split("\n");
    arrayList.addAll(Arrays.asList(links_array));

}).start();

如果你希望保留原有拼接逻辑,也可以在拆分数组后遍历处理每条链接:

String linksStr = jsoupStr.toString().trim();
String[] links_array = linksStr.split("\n");
// 遍历补全所有链接的前缀
for (int i = 0; i < links_array.length; i++) {
    String singleUrl = links_array[i].trim();
    if (singleUrl.startsWith("//")) {
        links_array[i] = "https:" + singleUrl;
    }
}
arrayList.addAll(Arrays.asList(links_array));

内容的提问来源于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.28 03:54:06