我是xpath的新手所以请耐心等待。目前,我正在寻求使用scrapy从一些网页中删除一些内容,内容看起来像这样:
<td colspan="3" valign="top" class="regular">Landsize: 84,000sq with an extensive shoreline 750m<br />
<br />
Call Or Email for more info<br />
. Full-length Olympicpool,children pool,jacuzzi<br />
\' Landscapesdkey bridges<br />
. 2 tennis courts<br />
. water features True seafront development with iconic design by architect Daniel Libeskind<br />
lconic residential, located less than\' 150 metres from the shoreline<br />
<br />
opposite the future integrated resort on sentosa Island.<br />
A part of keppel Bay world calss water front precinct with luxury homes.<br />
<br />
Call or email for more info </td>
具体来说,我正在使用以下hxs.select('//tr[contains(td,"Description")]/following-sibling::tr[1]/td/text()').extract()
但是,由于内容由<br>
分隔,执行此操作会将结果项目分解为列表。如果我从xpath中排除text()
,则<td>
元素将包含在结果字符串中,这是不可取的。
在xpath中是否有办法确保我的结果字符串是上面显示但没有td标记的所有内容?我希望我不需要通过<br/>
答案 0 :(得分:3)
根据您对Evan的正确答案的评论,您想跳过NL 。
在这种情况下,请尝试:
normalize-space(//tr[contains(td,"Description")]/following-sibling::tr[1]/td)
注意强>:
如果normalize-space()
的参数选择了多个节点,则此函数将返回仅处理第一个选定节点的结果。
删除所有前导和尾随空白字符。相邻空格字符的所有中间组都被单个空格字符替换。
答案 1 :(得分:0)
尝试在调用string()时包装表达式,该函数返回节点的字符串值,该节点是节点后代文本节点的所有字符串值的串联。
string(//tr[contains(td,"Description")]/following-sibling::tr[1]/td)
答案 2 :(得分:0)
您可能会发现HTML Agility Pack对于解析网页非常有用。