Tengo un archivo HTML (de Newegg) y su HTML está organizado como se muestra a continuación. Todos los datos en su tabla de especificaciones son " desc ", mientras que los títulos de cada sección están en " nombre " . A continuación se muestran dos ejemplos de datos de las páginas de 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>
Al final, me gustaría tener una clase para una CPU (que ya está configurada) que consta de un tipo de Marca, Serie, Núcleos y Socket para almacenar cada uno de los datos. Esta es la única forma en que puedo pensar para hacer esto:
if(parsedDocument.xpath(tr/td[@class="name"])=='Brand'):
CPU.brand = parsedDocument.xpath(tr/td[@class="name"]/nextsibling?).text
Y haciendo esto para el resto de valores. ¿Cómo podría lograr el siguiente hermano y hay una forma más fácil de hacerlo?
td[@class='name']
se romperán. Consulte esta pregunta para obtener más detalles.contains(concat(' ', @class, ' '), ' name ')
. Pero en esta pregunta, los atributos @class tienen solo valores únicos../following-sibling::td
./
. Además, si desea seleccionar el hermano siguiente inmediato, utilice:, de lofollowing-sibling::td[1]
contrario, si hay más de un hermano siguiente, se seleccionarán todos.Pruebe el
following-sibling
eje (following-sibling::td
).fuente