2012-06-25 4 views
0

Мне нужно разобрать/извлечь информацию с html-страницы. В основном, что я делаю, это загрузка страницы в виде строки с использованием System.Net.WebClient и использование HTML Agility Pack для получения содержимого внутри тегов html (формы, метки, вменения и т. Д.).Анализ (извлечение) содержимого с html-страницы с использованием .net

Однако некоторое содержание находится внутри яваскрипта тега сценария, например:

<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 помочь с этим? Я очень ценю любую помощь.

Заранее спасибо.

ответ

1

HAP не будет анализировать javascript для вас - лучшее, что он сделает, - это проанализировать содержимое элемента.

javascript.net может подписать счет.

+0

По некоторым причинам я был не удалось установить javascript.net (получили некоторые ошибки), но в любом случае я смог сделать то же самое с Jint. Благодарю. – CodeMaster2008

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 
    } 
+0

с помощью 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") как MyObject; Тогда просто иметь структуру данных, такую ​​как класс MyObject { Публичный объект item {get; задавать; } } –

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; } 
    } 
Смежные вопросы