Ich habe eine HTML-Datei (von Newegg) und ihr HTML ist wie folgt organisiert. Alle Daten in ihrer Spezifikationstabelle sind " desc ", während die Titel der einzelnen Abschnitte in " name" stehen. 'Nachfolgend finden Sie zwei Beispiele für Daten von Newegg-Seiten.
<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>
Am Ende hätte ich gerne eine Klasse für eine CPU (die bereits eingerichtet ist), die aus einem Brand-, Serien-, Cores- und Socket-Typ besteht, um alle Daten zu speichern. Dies ist der einzige Weg, den ich mir vorstellen kann, um dies zu tun:
if(parsedDocument.xpath(tr/td[@class="name"])=='Brand'):
CPU.brand = parsedDocument.xpath(tr/td[@class="name"]/nextsibling?).text
Und das für den Rest der Werte. Wie würde ich das Nextsibling erreichen und gibt es einen einfacheren Weg, dies zu tun?
td[@class='name']
wird dies unterbrochen. Siehe diese Frage für Details.contains(concat(' ', @class, ' '), ' name ')
. In dieser Frage haben die @ class-Attribute jedoch nur einzelne Werte../following-sibling::td
./
. Wenn Sie das unmittelbar folgende Geschwister auswählen möchten, verwenden Sie:following-sibling::td[1]
Andernfalls werden alle ausgewählt, wenn mehr als ein Geschwister vorhanden ist.Probieren Sie die
following-sibling
Achse (following-sibling::td
).quelle