HTML Agility Confezione
-
19-09-2019 - |
Domanda
Voglio analizzare la tabella HTML usando HTML agilità confezione. Voglio estrarre solo alcuni dati di colonna predefiniti dalla tabella.
Ma io sono una novità per l'analisi e l'agilità html pack e ho provato, ma non so come usare l'agilità pacchetto html per la mia necessità.
Se qualcuno sa, allora mi dia esempio, se possibile,
Modifica
E 'possibile analizzare tabella HTML come se vogliamo estrarre solo i dati i nomi delle colonne decisi? Come ci sono 4 colonne nome, indirizzo, phno e voglio estrarre solo nome e indirizzo dei dati.
Soluzione
Non è un esempio di che nei forum di discussione qui . Scorrere verso il basso un po 'per vedere la risposta tavolo. Mi auguro che avrebbero fornire campioni migliori che erano più facili da trovare.
EDIT:
Per estrarre i dati da specifiche colonne si dovrà prima trovare i tag <th>
che corrispondono alle colonne che si desidera e ricordare loro indici. Si sarebbe quindi bisogno di trovare i tag <td>
per gli stessi indici. Supponendo che conoscete gli indici delle colonne si potrebbe fare qualcosa di simile:
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: Se non si conoscono gli indici delle colonne si poteva fare tutto in questo modo. Non ho ancora testato questo.
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
}
}
}