注意:问题已经更新,因为给出了一些早期答案。这仍然是同一个问题,希望更清楚。
我正在尝试让网站刮刀正常工作,而我遇到一些问题需要为某些表格单元格提供合适的xpath字符串。
<tbody>
<tr>
<td class="Label" width="20%" valign="top">Uninteresting section</td>
<td class="Data"> I don't care about this</td>
</tr>
<tr>
<td></td>
<td class="Data"> I don't care about this</td>
</tr>
<tr>
<td class="Label" width="20%" valign="top">Interesting section</td>
<td class="Data"> I want this-1</td>
</tr>
<tr>
<td></td>
<td class="Data"> I want this-2</td>
</tr>
<tr>
<td></td>
<td class="Data"> I want this-n</td>
</tr>
<tr>
<td class="Label" width="20%" valign="top">Uninteresting section</td>
<td class="Data"> I don't care about this</td>
</tr>
<tr>
<td></td>
<td class="Data"> I don't care about this</td>
</tr>
</tbody>
我想要有趣部分中所有数据字段的内容。 可以有任意数量的这些。我不关心代码中的任何其他内容,但我需要所有这些。
在上面的例子中: 我想要这个-1 我想要这个-2 我想要这个 -
如果相关,我在Python 2.7中使用xml.dom.minidom和py-dom-xpath。
答案 0 :(得分:1)
您可以使用
获取该部分(包括其他部分)之后的所有内容 //tr[@class="Entry"]//tr/td[contains(text(), "Section title")]/following::td[@class = "Data"]/text()
然后你可以获得你不想要的下一部分的所有内容
//tr[@class="Entry"]//tr/td[contains(text(), "Section title")]/following::td[@class="Label"][1]/following::td[@class = "Data"]/text()
然后你可以在Python中使用第一个n - m tds。
你可以尝试在XPath中使用位置和计数功能:
//tr[@class="Entry"]//tr/td[contains(text(), "Section title")]/following::td[@class = "Data"][position() <= (count(//tr[@class="Entry"]//tr/td[contains(text(), "Section title")]/following::td[@class = "Data"]/text()) - count(//tr[@class="Entry"]//tr/td[contains(text(), "Section title")]/following::td[@class="Label"][1]/following::td[@class = "Data"]/text()) )]/text()
如果你有XPath 2.0,你可以使用except
运算符优雅地完成它:
//tr[@class="Entry"]//tr/td[contains(text(), "Section title")]/following::td[@class = "Data"]/text() except //tr[@class="Entry"]//tr/td[contains(text(), "Section title")]/following::td[@class="Label"][1]/following::td[@class = "Data"]/text()
答案 1 :(得分:0)
//tr[@class="Entry"]/td[@class="Data"]/text()
答案 2 :(得分:0)
//tbody[tr/td[contains(text(),"Section title")]]/tr/td[@class="Data"]/text()
更新。这是做什么的:
获取tbody
tr
td
td
包含“部分标题”
从每个lass="Data"
获取c {{1}}