Ein Beispiel dafür findet sich in den Diskussionsforen aquí . Scrollen Sie ein wenig nach unten, um die Antwort in der Tabelle zu sehen. Ich wünschte, sie würden bessere Beispiele liefern, die leichter zu finden sind.
EDIT: Um Daten aus bestimmten Spalten zu extrahieren, müssen Sie zunächst die <th>
Tags, die den gewünschten Spalten entsprechen, und merken Sie sich deren Indizes. Sie müssen dann die <td>
Tags für dieselben Indizes. Angenommen, Sie kennen die Indizes der Spalten, könnten Sie so vorgehen:
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
}
Bearbeiten2: Wenn Sie die Indizes der Spalten nicht kennen, können Sie das Ganze auch so machen. Ich habe dies 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
}
}
}