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

如何使用HtmlAgilityPack提取页面脚本src中的特定文本

使用HtmlAgilityPack提取JavaScript中oScript.src里的"ethereum"部分

没问题,我来帮你搞定这个需求!你要提取的是嵌在<script>标签里JS代码中oScript.src属性里的子reddit名称(也就是这里的ethereum),用HtmlAgilityPack结合正则就能轻松实现,步骤如下:


1. 定位目标<script>节点

首先,我们需要用HtmlAgilityPack加载你的HTML页面,然后找到包含这段Reddit懒加载代码的<script>标签。因为页面里可能有多个script标签,我们可以通过代码里的特定注释/* Reddit lazy load hack */来精准筛选:

using HtmlAgilityPack;

// 加载HTML文档(可以是本地字符串或远程页面)
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(yourHtmlContent); // 如果你是加载远程页面,用 new HtmlWeb().Load("your-page-url")

// 筛选出包含目标JS代码的script节点
var targetScriptNode = htmlDoc.DocumentNode
    .SelectNodes("//script")
    ?.FirstOrDefault(script => script.InnerText.Contains("Reddit lazy load hack"));

if (targetScriptNode == null)
{
    // 处理找不到目标script的情况,比如抛出提示或返回空
    Console.WriteLine("未找到包含目标Reddit代码的script标签");
    return;
}

2. 提取并解析JS代码中的目标内容

拿到script节点的文本内容后,我们用正则表达式匹配oScript.src的赋值语句,精准捕获r/后面到.embed之前的子reddit名称。这个正则能兼容代码里的空格、单双引号等小变动:

using System.Text.RegularExpressions;

// 获取script标签内的JS代码文本
string jsCode = targetScriptNode.InnerText;

// 定义正则:匹配oScript.src的赋值,捕获r/后的子reddit名称
Regex subredditRegex = new Regex(
    @"oScript\.src\s*=\s*["']https:\/\/www\.reddit\.com\/r\/([^."']+)\.embed",
    RegexOptions.IgnoreCase
);

Match matchResult = subredditRegex.Match(jsCode);
if (matchResult.Success)
{
    // Groups[1]就是我们要的"ethereum"
    string targetSubreddit = matchResult.Groups[1].Value;
    Console.WriteLine($"提取到的子reddit名称:{targetSubreddit}");
}
else
{
    Console.WriteLine("未匹配到目标src属性中的子reddit名称");
}

小提示

  • 如果你的HTML页面里的JS代码格式有细微变化(比如引号用单引号、赋值前后有更多空格),这个正则依然能正常工作,因为我们用了\s*匹配任意空格,["']兼容单双引号,[^."']+确保只捕获到.embed之前的有效子reddit名称。
  • 一定要确保筛选script节点的条件足够精准,避免误抓其他无关的script标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:29:05