У меня есть файл HTML (из Newegg), и их HTML организован как ниже. Все данные в их таблице спецификаций являются 'desc', в то время как заголовки каждого раздела находятся на 'имя'. Ниже два примера данных из страниц 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>
В конце я хотел бы иметь класс для ЦП (который уже настраивается), который состоит из Бренда, Ряда, Ядер и типа Сокета для хранения каждых из данных. Это - единственный путь, которым я могу думать для движения о выполнении этого:
if(parsedDocument.xpath(tr/td[@class="name"])=='Brand'):
CPU.brand = parsedDocument.xpath(tr/td[@class="name"]/nextsibling?).text
И делая это для остальной части значений. Как я выполнил бы nextsibling и являюсь там более легким способом сделать это?
Как бы мне выполнить следующую задачу? и есть ли более простой способ сделать это?
Вы можете использовать :
tr/td[@class='name']/following-sibling::td
, но я бы предпочел использовать напрямую :
tr[td[@class='name'] ='Brand']/td[@class='desc']
Это предполагает, что :
Узел контекста, по которому вычисляется выражение XPath является родительским для всех элементов tr
, не указанных в вашем вопросе.
Каждый элемент tr
имеет только один td
с атрибутом class
со значением 'name'
и только одним td
] с атрибутом class
со значением 'desc'
.
Попробуйте ось следующий-брат
( следующий-брат :: td
).