用于标签之间的节点的Scrapy选择器

时间:2014-08-05 15:55:40

标签: python xpath scrapy separator

我有像这样的HTML代码

<div>
  Foo <span>Bar</span><br />
  Baz<br />
  <b>Foobar</b> Quux
</div>

现在,我想处理由<br />标记分隔的节点,如下所示:

nodes  = sel.xpath("???")
my_foo = nodes[0] # contains Foo <span>Bar</span>
my_bar = nodes[1] # contains Bar
my_fb  = nodes[2] # contains <b>Foobar</b> Quux

是否有一些XPath或CSS表达式会执行此操作,还是必须迭代<div>的所有子节点,在此过程中为每个不是<br>的节点构建一个数组?

1 个答案:

答案 0 :(得分:3)

我能想到的最接近的是:

[sel.xpath('''.//div/node()[count(preceding-sibling::br)=%d]
                           [not(self::br)]''' % i).extract()
 for i in range(0, len(sel.xpath('.//div/br'))+1)]

给你:

[[u'\n  Foo ', u'<span>Bar</span>'],
 [u'\n  Baz'],
 [u'\n  ', u'<b>Foobar</b>', u' Quux\n']]

它为您提供<br/><div>元素之间的节点列表(计算<br> s并查找之前有<br> s的节点(无,然后是1) ,然后2))