Kotlin中使用Jsoup提取HTML标签data-video属性值失败如何解决
问题排查与解决方法
第一步:验证原始HTML内容是否符合预期
绝大多数返回空的情况是请求拿到的响应文本本身不存在目标元素,先执行以下代码打印原始返回内容,确认是否包含class为tab-video的li标签:
val rawHtml = get(data).text println("原始HTML内容:$rawHtml") // 手动检查输出内容中是否存在目标li标签
如果原始内容没有目标元素,说明请求本身没有拿到正确的页面:
- 检查请求是否缺少必要的Cookie、User-Agent等请求头
- 确认目标内容是否为前端JS动态渲染生成,静态HTTP请求无法直接拿到这类内容,需要改用无头浏览器等方案获取渲染后的页面内容
第二步:调整Jsoup提取逻辑
如果确认原始HTML包含目标元素,可按以下方案调整提取代码:
写法1:拆分校验逻辑,便于定位问题
val doc = Jsoup.parse(rawHtml) val targetLi = doc.selectFirst("li.tab-video") if (targetLi == null) { // 匹配不到元素的处理逻辑 return false } // 两种属性获取方式二选一即可,dataset方法专门用于提取data-*属性,稳定性更高 val videoUrl = targetLi.attr("data-video") // val videoUrl = targetLi.dataset().get("video")
写法2:兜底模糊匹配
如果目标元素的class属性还附带其他值,导致精确匹配失败,可以用模糊匹配选择器:
val videoUrl = Jsoup.parse(rawHtml) .selectFirst("li[class*='tab-video']") ?.attr("data-video") ?: return false
内容的提问来源于stack exchange,提问作者juan manuel
相关产品推荐
相关产品推荐

