2010-03-11 19 views
6

Quiero analizar la tabla html usando html agility pack. Quiero extraer solo algunos datos de columna predefinidos de la tabla.HTML Agility Pack

Pero soy nuevo en el paquete de agilidad de análisis y html y lo he intentado, pero no sé cómo usar el paquete de agilidad html para mi necesidad.

Si alguien entonces me conoce dar ejemplo si es posible

EDIT:

¿Es posible analizar tabla html como si queremos extraer sólo los datos de los nombres de columna decidido? Al igual que hay 4 columnas nombre, dirección, phno y quiero extraer solo el nombre y la dirección de datos.

+0

@Harikrishna - ¿tiene una pequeña muestra de la estructura de la mesa? –

+0

Para obtener más información para extraer los datos de los datos html usando html Agility pack: http://stackoverflow.com/questions/2431652/html-agility-pack – Harikrishna

Respuesta

6

Hay un ejemplo de eso en los foros de discusión here. Desplácese un poco hacia abajo para ver la respuesta de la tabla. Desearía que proporcionaran mejores muestras que fueran más fáciles de encontrar.

EDITAR: Para extraer datos de columnas específicas, primero debe encontrar las etiquetas <th> que corresponden a las columnas que desea y recordar sus índices. Entonces necesitaría encontrar las etiquetas <td> para los mismos índices. Asumiendo que conoce los índices de las columnas se podría hacer algo como esto:

HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml("http://somewhere.com"); 
HtmlNode table = doc.DocumentNode.SelectSingleNode("//table"); 
foreach (var row in table.SelectNodes("//tr")) 
{ 
    HtmlNode addressNode = row.SelectSingleNode("td[2]"); 
    //do something with address here 
    HtmlNode phoneNode = row.SelectSingleNode("td[5]"); 
    // do something with phone here 
} 

Edit2: Si usted no sabe los índices de las columnas que podría hacer todo el asunto como este. No he probado esto.

HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml("http://somewhere.com"); 
var tables = doc.DocumentNode.SelectNodes("//table"); 

foreach(var table in tables) 
{ 
    int addressIndex = -1; 
    int phoneIndex = -1; 
    var headers = table.SelectNodes("//th"); 
    for (int headerIndex = 0; headerIndex < headers.Count(); headerIndex++) 
    { 
     if (headers[headerIndex].InnerText == "address") 
     { 
      addressIndex = headerIndex; 
     } 
     else if (headers[headerIndex].InnerText == "phone") 
     { 
      phoneIndex = headerIndex; 
     } 
    } 

    if (addressIndex != -1 && phoneIndex != -1) 
    { 
     foreach (var row in table.SelectNodes("//tr")) 
     { 
      HtmlNode addressNode = row.SelectSingleNode("td[addressIndex]"); 
      //do something with address here 
      HtmlNode phoneNode = row.SelectSingleNode("td[phoneIndex]"); 
      // do something with phone here 
     } 
    } 
} 
+0

@Harikrishna: ¿Es el mismo tipo de datos en cada tabla? ¿Desea extraer las mismas columnas de todas las tablas? ¿Solo quieres encontrar una tabla específica? Ayúdame un poco aquí. Intento seguir respondiendo y luego brindas más información. Vamos a obtener toda la información por ahí. –

+0

@Mike Dos Señor ... Bien, lo siento por eso ... Al igual que en la página web, hay más de una etiqueta de tabla, pero quiero extraer los datos de una sola tabla que tenga el nombre de la columna, como hemos definido como dirección y número de teléfono. La otra etiqueta de tabla es para otra información y no es útil. – Harikrishna

+0

@Mike Dos señores ... Hay muchas páginas web con más de una tabla. Y de cada página web quiero extraer los datos para una sola tabla que tiene el nombre de la columna del teléfono y la dirección. – Harikrishna

Cuestiones relacionadas