所以,我得到了这种类型的html架构:
<table id="proposal-details" class="details">
<tbody><tr>
<th>
Application type:
</th>
<td>
P
</td>
</tr>
<tr>
<th>
Proposed development
</th>
<td>
Prune 1 x Eucalyptus
</td>
</tr>
<tr>
<th>
Date received:
</th>
<td>
06 Feb 2015
</td>
</tr>
<tr>
<th>
Registration date:
<br>
(Statutory start date)
</th>
<td>
06 Feb 2015
</td>
</tr>
我有xpath来捕获所有 th ;这一直到最后 的文本注册日期:,其中我实际上不需要选择 br 文本。< / p>
我有一个解决这个问题的方法,问题在于这个xpath,
len(response.xpath("//table//tr//th[not(.//br)]/text()").extract())
整个 标签被忽略了。 有什么建议吗?
这是我得到的输出:
[u' Application type: ',
u' Proposed development ',
u' Date received: ']
我实际上需要注册日期:而没有列表中的(法定开始日期)。
答案 0 :(得分:2)
据我了解您的问题,您希望获取所有th
元素的文本,但忽略<br>
之后的文字。如果是这种情况,请使用以下XPath
//table//tr//th/text()[not(preceding-sibling::br)]
应用于您的输入时会产生结果
Application type:
Proposed development
Date received:
Registration date:
您使用的XPath只会忽略每个th
有孩子的br
:
th[not(.//br)]
th/text()[not(preceding-sibling::br)]
检索th
中没有前一个兄弟br
的所有文字元素。