Pack d'agilité HTML et LINQ

c# html-agility-pack linq web-scraping

Question

Je souhaite utiliser HAP pour extraire des données d'une table sur un site Web, parcourir les lignes pour rechercher une valeur dans une colonne correspondant à une chaîne prédéfinie, puis ne stocker que la ligne correspondante. Ensuite, j'aurai un dictionnaire avec l'en-tête de colonne comme clé et le texte de colonne pour la ligne sélectionnée comme valeur.

Tableau ex.

<table id="Table3">
<tbody><tr><td></td></tr>
<tr>
<td>ID</td>
<td>Last Name</td>
<td>First Name</td>
<td>Birth Date</td>
<td>Relation</td>
</tr>

<tr>
<td>nbsp;01&nbsp;</td>
<td>&nbsp;DUNN          &nbsp;</td>
<td>&nbsp;JOE          &nbsp;</td>
<td>&nbsp;19931209&nbsp;</font></td>
<td>&nbsp;Son&nbsp;</td>
</tr>

<tr>
<td>nbsp;02&nbsp;</td>
<td>&nbsp;SMITH          &nbsp;</td>
<td>&nbsp;MARY          &nbsp;</td>
<td>&nbsp;19950206&nbsp;</font></td>
<td>&nbsp;Daughter&nbsp;</td>
</tr>

<tr>
<td>nbsp;03&nbsp;</td>
<td>&nbsp;ROCKFORD          &nbsp;</td>
<td>&nbsp;BILL          &nbsp;</td>
<td>&nbsp;20000320&nbsp;</font></td>
<td>&nbsp;Son&nbsp;</td>
</tr>

</tbody></table>

Si ma date de naissance que je veux apparier est 20000320, alors je veux toutes les informations sur Bill.

L'ajout des titres d'en-tête à la liste n'est pas un problème. Je sais que la ligne utilisateur n'est pas correctement écrite. Ce que j’essaie toujours d’obtenir une liste de rangées au lieu d’une rangée. Un autre problème que je rencontre avec la ligne user est le texte intérieur qui reviendra avec "& nbsp" dedans et je ne peux pas simplement faire un .Replace donc j'ai besoin d'un moyen de supprimer les espaces. Je suis ouvert à toutes les suggestions. Des moyens plus intelligents de faire tout cela, etc.

<table id="Table3">
<tbody><tr><td></td></tr>
<tr>
<td>ID</td>
<td>Last Name</td>
<td>First Name</td>
<td>Birth Date</td>
<td>Relation</td>
</tr>

<tr>
<td>nbsp;01&nbsp;</td>
<td>&nbsp;DUNN          &nbsp;</td>
<td>&nbsp;JOE          &nbsp;</td>
<td>&nbsp;19931209&nbsp;</font></td>
<td>&nbsp;Son&nbsp;</td>
</tr>

<tr>
<td>nbsp;02&nbsp;</td>
<td>&nbsp;SMITH          &nbsp;</td>
<td>&nbsp;MARY          &nbsp;</td>
<td>&nbsp;19950206&nbsp;</font></td>
<td>&nbsp;Daughter&nbsp;</td>
</tr>

<tr>
<td>nbsp;03&nbsp;</td>
<td>&nbsp;ROCKFORD          &nbsp;</td>
<td>&nbsp;BILL          &nbsp;</td>
<td>&nbsp;20000320&nbsp;</font></td>
<td>&nbsp;Son&nbsp;</td>
</tr>

</tbody></table>

Réponse acceptée

vous pouvez essayer de sélectionner tout le tr en utilisant la valeur en td, je pense

//*[@id=\"Table3\"]/tbody/tr[td//text()[contains(., 'targetString')]]

regarde ça

XPath pour sélectionner une ligne de tableau comportant une cellule contenant le texte spécifié




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi