使用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
相关产品推荐
相关产品推荐

