从生成的 <script> 中提取数据并处理结果
Posted
技术标签:
【中文标题】从生成的 <script> 中提取数据并处理结果【英文标题】:Data extraction from a generated <script> and process the results 【发布时间】: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
【参考方案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 中的内容以调试和调整您的程序以上是关于从生成的 <script> 中提取数据并处理结果的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Beautiful Soup 从 <script> 中提取内容