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

使用Groovy从嵌套在JSON响应中的HTML页面提取href中的key参数值

解决HTML解析报错并提取URL中key参数的方案

我之前也碰到过一模一样的问题——用XmlSlurper解析邮件里的HTML经常因为格式不规范报错,毕竟邮件HTML大多是各种编辑器生成的,很难严格符合XML标准。下面是我验证过的可行方案,用专门的HTML解析库Jsoup来处理,轻松提取目标key值:

步骤1:引入Jsoup依赖

Groovy里可以直接用@Grab快速引入依赖,如果是项目环境的话,Gradle/Maven添加对应依赖即可:

@Grab('org.jsoup:jsoup:1.17.2')
import org.jsoup.Jsoup
import org.jsoup.nodes.Document
import groovy.json.JsonSlurper

步骤2:解析JSON获取HTML内容

这部分你已经实现了,我再贴出来确保流程完整:

// 替换成你的实际Graph API返回的JSON字符串
def jsonResponse = '''{"value":[{"body":{"content":"<html><body><a href='https://abc.xyz123.com?key=GBsG3gBoI4YV+fSfejXCbw6vgG6m4OCU7Czfn3PAKXtxVI9Ex'>登录</a></body></html>"}}]}'''

def jsonSlurper = new JsonSlurper()
def jsonData = jsonSlurper.parseText(jsonResponse)
def htmlContent = jsonData.value[0].body.content

步骤3:解析HTML并提取key参数

用Jsoup解析HTML,它会自动处理不规范的标签,然后定位目标a标签,提取href并解析key:

// 解析HTML文档
Document doc = Jsoup.parse(htmlContent)

// 定位目标a标签:这里用href包含abc.xyz123.com来筛选,你可以根据实际情况调整(比如链接文本、class属性等)
def targetLink = doc.select("a[href*=abc.xyz123.com]").first()

if (targetLink) {
    String href = targetLink.attr("href")
    // 提取key参数值:先分割出key=后面的部分,再处理可能存在的其他参数
    def keyValue = href.split("key=")[1].split("&")[0]
    println "提取到的key值:${keyValue}"
} else {
    println "未找到包含目标链接的a标签"
}

为什么不用XmlSlurper?

XmlSlurper依赖SAXParser,它是为严格的XML设计的,而邮件HTML经常有未闭合的标签、属性省略引号、大小写不规范等问题,这些都会触发解析错误。Jsoup是专门针对HTML开发的解析器,会自动修复这些不规范的语法,完美适配邮件这类场景。

额外提示

如果邮件里有多个a标签,你可以优化选择器来精准定位,比如:

  • 根据链接文本:doc.select("a:contains(点击登录)")
  • 根据class属性:doc.select("a.login-link")
  • 组合多个条件:doc.select("a[href*=abc.xyz123.com]:contains(登录)")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 09:52:42