HTML Agility Pack e LINQ

c# html-agility-pack linq web-scraping

Domanda

Voglio utilizzare HAP per raschiare i dati da una tabella su un sito Web, scorrere ciclicamente le righe per trovare un valore in una colonna che corrisponde a una stringa predefinita e quindi memorizzare solo la riga corrispondente. Quindi avrò un dizionario con l'intestazione della colonna come chiave e il testo della colonna per la riga selezionata come valore.

Tabella 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>

Se la mia data di DOB che voglio abbinare è 20000320 allora voglio tutte le informazioni su Bill.

Aggiungere titoli di intestazione alla lista non è un problema. So che non ho scritto correttamente la riga dell'utente. Quello che ho sta ancora cercando di ottenere un elenco di righe anziché una riga. Un altro problema che ho incontrato con la riga utente è che il testo interno tornerà con "& nbsp" al suo interno e non posso semplicemente fare un .Replace quindi ho bisogno di un modo per rimuovere gli spazi. Sono aperto a tutti i suggerimenti. Modi più intelligenti di fare tutto questo ecc.

<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>

Risposta accettata

puoi provare a selezionare l'intero tr usando il valore in td, penso

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

guarda questo

XPath per selezionare una riga della tabella con una cella contenente testo specificato




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché