Ich möchte die HTML-Tabelle mit HTML Agility Pack analysieren. Ich möchte nur einige vordefinierte Spaltendaten aus der Tabelle extrahieren.
Aber ich bin neu in Parsing und HTML Agility Pack und ich habe versucht, aber ich weiß nicht, wie man das HTML-Agility-Pack für meine Bedürfnisse verwenden.
Wenn jemand weiß, dann gib mir ein Beispiel, wenn möglich
EDIT:
Ist es möglich, die HTML-Tabelle zu analysieren, wenn wir nur die Daten der ausgewählten Spaltennamen extrahieren wollen? Wie gibt es 4 Spalten Name, Adresse, Phno und ich möchte nur Name und Adresse Daten extrahieren.
Ein Beispiel dafür gibt es in den Diskussionsforen hier . Scrollen Sie ein wenig nach unten, um die Tabelle zu sehen. Ich wünschte, sie würden bessere Proben liefern, die leichter zu finden sind.
BEARBEITEN: Um Daten aus bestimmten Spalten zu extrahieren, müssten Sie zuerst die <th>
-Tags finden, die den gewünschten Spalten entsprechen, und sich deren Indizes merken. Sie müssten dann die <td>
-Tags für die gleichen Indizes finden. Angenommen, Sie kennen die Indizes der Spalten, können Sie Folgendes tun:
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: Wenn Sie die Indizes der Spalten nicht kennen, können Sie die ganze Sache so machen. Ich habe das nicht getestet.
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
}
}
}