J'ai un fichier HTML (de Newegg) et leur HTML est organisé comme ci-dessous. Toutes les données de leur tableau de spécifications sont « desc » tandis que les titres de chaque section sont dans « nom » . Voici deux exemples de données provenant de pages Newegg.
<tr>
<td class="name">Brand</td>
<td class="desc">Intel</td>
</tr>
<tr>
<td class="name">Series</td>
<td class="desc">Core i5</td>
</tr>
<tr>
<td class="name">Cores</td>
<td class="desc">4</td>
</tr>
<tr>
<td class="name">Socket</td>
<td class="desc">LGA 1156</td>
<tr>
<td class="name">Brand</td>
<td class="desc">AMD</td>
</tr>
<tr>
<td class="name">Series</td>
<td class="desc">Phenom II X4</td>
</tr>
<tr>
<td class="name">Cores</td>
<td class="desc">4</td>
</tr>
<tr>
<td class="name">Socket</td>
<td class="desc">Socket AM3</td>
</tr>
En fin de compte, j'aimerais avoir une classe pour un processeur (qui est déjà configuré) qui se compose d'un type de marque, série, cœurs et socket pour stocker chacune des données. C'est le seul moyen auquel je peux penser pour y parvenir:
if(parsedDocument.xpath(tr/td[@class="name"])=='Brand'):
CPU.brand = parsedDocument.xpath(tr/td[@class="name"]/nextsibling?).text
Et faire cela pour le reste des valeurs. Comment pourrais-je accomplir le nextsibling et existe-t-il un moyen plus simple de le faire?
td[@class='name']
se cassera. Voir cette question pour plus de détails.contains(concat(' ', @class, ' '), ' name ')
. Mais dans cette question, les attributs @class n'ont que des valeurs uniques../following-sibling::td
./
. De plus, si vous souhaitez sélectionner le frère suivant immédiat, utilisezfollowing-sibling::td[1]
:, sinon, s'il y a plus d'un frère suivant, tous seront sélectionnés.Essayez l'
following-sibling
axe (following-sibling::td
).la source