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

如何使用C# HtmlAgilityPack提取HTML中Script标签内的指定JSON数据

如何用HtmlAgilityPack提取script标签内的JSON内容?

嘿,我看你折腾了好久用HtmlAgilityPack提取那段HTML里的"name":"John",其实问题出在你之前的代码一直在处理div标签的文本,但目标内容藏在script标签里呢!我给你调整下代码,保证能搞定:

核心思路

  1. 先定位到包含目标JSON的script节点,而不是div节点
  2. 提取script标签内的文本内容,清理掉JS变量赋值的冗余部分,得到合法的JSON字符串
  3. 用JSON解析库(比如Newtonsoft.Json或内置的System.Text.Json)解析字符串,提取name字段的值

修改后的完整代码

// 替换成你需要解析的目标HTML
string targetHtml = @"<html> <body class=""detailpage""> <div id=""innerLayout""> <section id=""body-container""> <div class=""wrapper""> <div class=""content"" id=""offer_active""> <div class=""clr offerbody""> <div class=""offercontent fleft rel ""> <div class=""offercontentinner""> <script> texto = {""name"":""John""}; </script> </div> </div> </div> </div> </div> </section> </div> </body> </html>";

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(targetHtml);

// 用XPath精准定位到包含"texto ="的script节点,避免匹配其他无关script
var targetScriptNode = doc.DocumentNode.SelectSingleNode("//script[contains(text(), 'texto =')]");

if (targetScriptNode != null)
{
    // 提取script内的原始文本
    string rawScriptText = targetScriptNode.InnerText.Trim();
    
    // 清理掉JS变量赋值的部分,得到纯JSON字符串
    string cleanJson = rawScriptText.Replace("texto = ", "")
                                    .Replace(";", "")
                                    .Trim();
    
    // 方法1:用Newtonsoft.Json解析(需要先通过NuGet安装:Install-Package Newtonsoft.Json)
    dynamic jsonObject = Newtonsoft.Json.JsonConvert.DeserializeObject(cleanJson);
    string extractedName = jsonObject.name;
    Console.WriteLine($"提取到的name值:{extractedName}");

    // 方法2:用.NET Core 3.0+内置的System.Text.Json(无需额外安装包)
    // var jsonDict = System.Text.Json.JsonSerializer.Deserialize<Dictionary<string, string>>(cleanJson);
    // string extractedName = jsonDict["name"];
    // Console.WriteLine($"提取到的name值:{extractedName}");
}
else
{
    Console.WriteLine("未找到包含目标内容的script节点");
}

Console.ReadKey(true);

关键细节说明

  • XPath筛选://script[contains(text(), 'texto =')]能帮你精准定位到目标script,避免页面上其他无关script干扰
  • 文本清理:因为script里的内容是JS变量赋值语句(texto = {"name":"John"};),必须去掉texto = 和结尾的;,才能得到符合JSON规范的字符串
  • JSON解析:两种解析方式任选一种,如果你用的是老版本.NET Framework,Newtonsoft.Json更兼容;如果是.NET Core/.NET 5+,用内置的System.Text.Json更轻便

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:17:40