tutorial scrapysharp scraping scrap page ironwebscraper iron hacer from ejemplos data con como c# html html-agility-pack

scrapysharp - web scraping c# ejemplos



Análisis de página HTML con HtmlAgilityPack (2)

Hay varias formas de seleccionar elementos utilizando el paquete de agilidad.

Supongamos que hemos definido nuestro HtmlDocument siguiente manera:

string html = @"<TD class=texte width=""50%""> <DIV align=right>Name :<B> </B></DIV></TD> <TD width=""50%""> <INPUT class=box value=John maxLength=16 size=16 name=user_name> </TD> <TR vAlign=center>"; HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html);

1. Simple LINQ
Podríamos usar el método Descendants() , pasando el nombre de un elemento que estamos buscando:

var inputs = htmlDoc.DocumentNode.Descendants("input"); foreach (var input in inputs) { Console.WriteLine(input.Attributes["value"].Value); // John }

2. LINQ más avanzado
Podríamos reducir eso utilizando LINQ más elegante:

var inputs = from input in htmlDoc.DocumentNode.Descendants("input") where input.Attributes["class"].Value == "box" select input; foreach (var input in inputs) { Console.WriteLine(input.Attributes["value"].Value); // John }

3. XPath
O podríamos usar XPath .

string name = htmlDoc.DocumentNode .SelectSingleNode("//td/input") .Attributes["value"].Value; Console.WriteLine(name); //John

Utilizando C # Me gustaría saber cómo obtener el valor de Textbox (es decir: john) de este script html de muestra:

<TD class=texte width="50%"> <DIV align=right>Name :<B> </B></DIV></TD> <TD width="50%"><INPUT class=box value=John maxLength=16 size=16 name=user_name> </TD> <TR vAlign=center>


HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(html); XPathNavigator docNav = doc.CreateNavigator(); XPathNavigator node = docNav.SelectSingleNode("//td/input/@value"); if (node != null) { Console.WriteLine("result: " + node.Value); }

Escribí esto bastante rápido, así que querrás hacer algunas pruebas con más datos.

NOTA: las cadenas XPath aparentemente tienen que estar en minúsculas.

EDITAR: Aparentemente, la versión beta ahora es compatible con Linq to Objects directamente, por lo que probablemente no hay necesidad de usar el convertidor.