Saya memiliki file HTML (dari Newegg) dan HTML-nya diatur seperti di bawah ini. Semua data dalam tabel spesifikasinya adalah ' desc ' sedangkan judul tiap bagian ada di ' name. 'Di bawah ini adalah dua contoh data dari halaman 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>
Pada akhirnya saya ingin memiliki kelas untuk CPU (yang sudah diatur) yang terdiri dari jenis Merek, Seri, Cores, dan Socket untuk menyimpan setiap data. Inilah satu-satunya cara yang dapat saya pikirkan untuk melakukan ini:
if(parsedDocument.xpath(tr/td[@class="name"])=='Brand'):
CPU.brand = parsedDocument.xpath(tr/td[@class="name"]/nextsibling?).text
Dan melakukan ini untuk nilai-nilai lainnya. Bagaimana saya menyelesaikan tahap berikutnya dan adakah cara yang lebih mudah untuk melakukan ini?
td[@class='name']
akan rusak. Lihat pertanyaan ini untuk detailnya.contains(concat(' ', @class, ' '), ' name ')
. Namun dalam pertanyaan ini, atribut @class hanya memiliki nilai tunggal../following-sibling::td
./
. Selain itu, jika Anda ingin memilih saudara kandung berikut, gunakanfollowing-sibling::td[1]
:, jika tidak, jika ada lebih dari satu saudara kandung berikut, semua akan dipilih.Coba
following-sibling
sumbu (following-sibling::td
).sumber