Scrapy选择器提取<br />标签之间的节点
我有这样的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)