使用 .net 从 html 页面分析(提取)内容

Parse (extract) content from a html page using .net

本文关键字:提取 内容 net html 使用      更新时间:2023-09-26

我需要从html页面解析/提取信息。基本上,我正在做的是使用System.Net.WebClient将页面加载为字符串,并使用HTML Agility Pack在html标签(表单,标签,输入等)中获取内容。

但是,某些内容位于javascript脚本标记中,如下所示:

<script type="text/javascript">
//<![CDATA[
var itemCol = new Array();
itemCol[0] = {
    pid: "01010101",
    Desc: "Some desc",
    avail: "Available",
    price: "$10.00"
};
itemCol[1] = {
    pid: "01010101",
    Desc: "Some desc",
    avail: "Available",
    price: "$10.00"
};
//]]>
</script>

那么,如何将其解析为 .NET 中的集合呢?HTML Agility Pack 能帮上忙吗?我真的很感激任何帮助。

提前谢谢。

HAP 不会为你解析出 javascript - 它能做的最好的事情就是解析元素的内容。

javascript.net 可能符合要求。

你想要脚本标签中的哪一部分内容?您期待什么样的收藏。您始终可以使用以下内容选择脚本标签

  HtmlDocument document = new HtmlDocument();
  document.Load(downloadedHtml);
  XPathNavigator n = document.CreateNavigator();
  XPathNodeIterator scriptTags = n.Select("//script");
  foreach (XPathNavigator nav in scriptTags)
  {
    string innerXml = nav.InnerXml;
    // Parse inner xml using regex
  }

使用 javascript.net 库可以获得一个集合

 using (JavascriptContext context = new JavascriptContext())
  {
    context.SetParameter("data", new MyObject());
     StringBuilder s = new StringBuilder();
    foreach (XPathNavigator nav in scriptTags)
    {
       s.Append(nav.InnerXml);
    }
  s.Append(";data.item = itemCol;");
  context.Run(s.ToString());
  MyObject o = context.GetParameter("data") as MyObject;

然后只需有一个数据结构,例如

   class MyObject
   {
     public object item { get; set; }
   }