【问题标题】:Data extraction from a generated <script> and process the results从生成的 <script> 中提取数据并处理结果
【发布时间】:2020-07-03 20:16:33
【问题描述】:

 string Url= "https://www.audiusa.com/dealers-webapp/map/dealer/423E99";   
     HtmlWeb web = new HtmlWeb();
                            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                            HtmlDocument doc = web.Load(Url);
     var scriptGoogleTagManager = doc.DocumentNode.SelectNodes("//script").Where(x => x.InnerHtml.Contains("window.Audi.Vars.searchType"));
                            if (scriptGoogleTagManager )
                            {
                                foreach(var tag in scriptGoogleTagManager)
                                {
                                    var s = tag.InnerText;
                                    Regex r = new Regex("\\s+window\\.Audi\\.Vars\\.searchResult\\s+\\=\\s+");
                                    Match m = r.Match(s.ToLower());
                                }
                            }

在上面的脚本中,我想在 window.Audi.Vars.searchResult = 和 window.Audi.Vars.dealers = 之后提取值。我在正则表达式中遇到问题,因为我对此了解不多。请帮助我

【问题讨论】:

  • s变量的内容是什么?
  • 如果您打开提供的Url的页面源并使用上面给出的特定字符串搜索脚本。然后您将能够找到s的值。 @GvS

标签: javascript c# regex


【解决方案1】:

我知道你想摆脱例如
window.Audi.Vars.searchResult =

var extract = s.slice(31); // since the string "window.Audi.Vars.searchResult =" has 31 chars

slice() 方法提取字符串的一部分并在新字符串中返回提取的部分。使用 start 和 end 参数指定要提取的字符串部分。这里我们只给出开始参数,它会提取到结尾。第一个字符的位置为 0,第二个字符的位置为 1,依此类推。 >br> 正则表达式在替换时很好,在这里删除字符串中的字符是一种更简单的方法。

修改你的代码并发布控制台结果:

 var scriptGoogleTagManager = doc.DocumentNode.SelectNodes("//script").Where(x => x.InnerHtml.Contains("window.Audi.Vars.searchType"));
                    if (scriptGoogleTagManager )
                    {
                        foreach(var tag in scriptGoogleTagManager)
                        {
                            var s = tag.InnerText;
                            console.debug("[content of s] " + s); 
                            var extract = s.slice(31); // since the string
                        }
                    }

【讨论】:

  • slice 显示错误,字符串不包含其定义@Codebreker007
  • 请编辑您的问题并插入行的结果 console.debug("[content of s] "+ s);放在 var s = tag.InnerText; 之后在您的代码中
  • var s @Codebreaker007 的内容见上图
  • 我很感兴趣 consol.debug 会给你带来什么。因为在该内容上,我们必须完成以下所有操作,我将在 3 小时内回来
  • 我需要控制台窗口的输出来帮助您,而不是一些您认为是 var s 内容的代码 - 我们需要在程序执行期间知道 var s 中的内容以调试和调整您的程序
猜你喜欢
  • 2018-08-21
  • 2022-01-07
  • 2020-09-17
  • 1970-01-01
  • 2021-04-28
  • 2019-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多