【问题标题】:scrapy xpath help needed需要scrapy xpath帮助
【发布时间】:2011-11-10 18:30:47
【问题描述】:

我是 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()

但是,由于内容由&lt;br&gt; 分隔,因此这样做会将结果项分成一个列表。如果我从 xpath 中排除 text()&lt;td&gt; 元素将包含在结果字符串中,这是不可取的。

在 xpath 中有没有办法确保我的结果字符串是上面显示的所有内容,但没有 td 标签?我希望我不需要通过&lt;br/&gt;手动加入列表

【问题讨论】:

    标签: python xpath scrapy


    【解决方案1】:

    从你对 Evan 正确答案的评论来看,你想跳过 NLs

    在这种情况下,请尝试:

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

    注意

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

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

    【讨论】:

    • 其实我只是想保留
      ,但想删除
    • @iws:那么你想要的无法实现对 XPath 表达式的求值——XPath 是一种用于 XML 的 查询 语言——因此它只是 选择 节点集,从不删除或修改节点。使用 XPath,您可以仅获取元素的字符串值(根本不包含后代节点),或者如果您想获取其子节点,则这些元素中的所有子节点/后代都将存在。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        相关资源
        最近更新 更多
        热门标签