J'essaie d'extraire des données d'un site Web.
et j'ai du mal à extraire certains détails de l'en-tête. Mon code saute simplement les en-têtes. C'est la " <h4 class
" que je tente d'extraire.
De plus, différents navigateurs contiennent des données différentes.
par exemple.
<section class="results-list">
<header>
<h3>U.S. House</h3>
</header>
<section class="results-group">
<header>
<h4 class="district">Florida 1st congressional district</h4>
</header>
<div class="container">
<div class="row clearfix">
<article class="results fifty">
<header>
<h4>Democrat primary</h4>
</header>
<section class="results-table">
<table>
<tr class="header results-table-row">
<th class="vote-percent">Percent</th>
<th class="candidate">Candidate</th>
<th class="vote-count">Votes</th>
<th class="winning">Winner</th>
</tr>
<tr>
<td class="vote-percent">55%</td>
<td class="candidate">Jennifer Zimmerman</td>
<td class="vote-count">13090</td>
<td class="winning">WINNER</td>
</tr>
</table>
</section>
</article>
Voici mon code.
foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table"))
{
var temp = table.InnerHtml.ToString();
foreach (HtmlNode row in table.SelectNodes("tr"))
{
ResultsListBox.Items.Add(row.InnerText.ToString());
foreach (HtmlNode cell in row.SelectNodes("th|td"))
{
ResultsListBox.Items.Add(cell.InnerText.ToString());
Console.WriteLine("cell: " + cell.InnerText);
}
}
}
En supposant qu'il n'y ait qu'un seul en-tête que vous souhaitez obtenir dans la page, élément h4
avec attribut class
, vous pouvez essayer la requête XPath suivante:
var queryHeader = "//section/header/h4[@class]";
var header = doc.DocumentNode.SelectSingleNode(queryHeader);
Console.WriteLine("header: " + header.InnerText);