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

时间:2012-06-25 20:50:12

标签: c# javascript .net html-parsing

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

但是,某些内容位于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可以帮忙吗? 我真的很感激任何帮助。

提前致谢。

3 个答案:

答案 0 :(得分:1)

HAP不会为你解析javascript - 它最好的办法是解析元素的内容。

javascript.net可能适合该法案。

答案 1 :(得分:1)

您想要脚本标记内容的哪些部分?你期待什么样的系列。您始终可以使用下面的

选择脚本标签
  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
  }

答案 2 :(得分:1)

使用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; }
   }