需要scrapy xpath帮助

时间:2011-11-10 18:30:47

标签: python xpath scrapy

我是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/>

手动加入列表

3 个答案:

答案 0 :(得分:3)

根据您对Evan的正确答案的评论,您想跳过NL

在这种情况下,请尝试:

normalize-space(//tr[contains(td,"Description")]/following-sibling::tr[1]/td)

注意

  1. 如果normalize-space()的参数选择了多个节点,则此函数将返回仅处理第一个选定节点的结果。

  2. 删除所有前导和尾随空白字符。相邻空格字符的所有中间组都被单个空格字符替换。

答案 1 :(得分:0)

尝试在调用string()时包装表达式,该函数返回节点的字符串值,该节点是节点后代文本节点的所有字符串值的串联。

string(//tr[contains(td,"Description")]/following-sibling::tr[1]/td)

答案 2 :(得分:0)

您可能会发现HTML Agility Pack对于解析网页非常有用。