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

如何用Xidel的XPath提取HTML中JavaScript对象内的TARGET值?

用Xidel直接提取Script标签内非标准JS对象的TARGET值

刚好我之前也碰到过类似的场景,xidel自带的XPath扩展函数完全能搞定,不用额外管道grep或者jq这类工具,直接用一个XPath表达式就能提取目标值。

先明确场景示例

假设你的HTML里的script标签内容是这种每行一个键值对的非合法JSON结构:

核心XPath表达式

直接用这个表达式就能精准提取TARGET对应的值:

replace(
  tokenize(//script[contains(text(),'TARGET')]/text(), '\n')[contains(.,'TARGET')],
  '^\s*TARGET\s*:\s*["'']?([^"'',\s]+)["'']?\s*,?$',
  '$1'
)

拆解表达式逻辑

  1. 定位目标Script标签://script[contains(text(),'TARGET')]/text() —— 先找到包含TARGET关键字的script标签,取出它的文本内容
  2. 按行分割文本:tokenize(..., '\n') —— 把script里的多行文本拆成单独的行节点集合
  3. 筛选目标行:[contains(.,'TARGET')] —— 从行集合里挑出包含TARGET的那一行
  4. 提取目标值:replace(..., 正则, '$1') —— 用正则匹配去掉冗余内容,只保留TARGET对应的值:
    • ^\s* 匹配行首的任意空格
    • TARGET\s*: 匹配TARGET关键字和后面的冒号(支持冒号前后有空格)
    • ["'']? 匹配可选的单/双引号(兼容带引号和不带引号的值)
    • ([^"'',\s]+) 捕获目标值(直到遇到引号、逗号或行尾空格)
    • \s*,?$ 匹配行尾的空格和可选的逗号
    • $1 替换为正则捕获到的目标值

实际命令示例

把表达式放到xidel命令里直接运行:

xidel --xpath 'replace(tokenize(//script[contains(text(),"TARGET")]/text(), "\n")[contains(.,"TARGET")], "^\\s*TARGET\\s*:\\s*["\'""]?([^"\'"",\\s]+)["\'""]?\\s*,?$", "$1")' your-html-file.html

特殊情况适配

如果你的TARGET值包含空格(比如TARGET: 'Hello World'),只需要把正则里的[^"'',\s]+改成[^"'',]+即可,这样就能匹配带空格的值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:30:44