Scrapy选择器提取<br />标签之间的节点

1 投票
1 回答
1319 浏览
提问于 2025-04-18 16:05

我有这样的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 个回答

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']]

它会列出在 <div> 标签下的 <br/> 元素之间的节点列表(通过计算 <br> 的数量,并查找在 <br> 之前的节点,数量依次为0、1、2)

撰写回答