gpt4 book ai didi

python - 用于提取两个已知 div 之间的所有内容的 Xpath

转载 作者:行者123 更新时间:2023-11-28 01:31:10 29 4
gpt4 key购买 nike

是否可以在两个已知的div之间选择任意数量的div,如下所示,

div[@class="foo"]
div[@id="dog"]
div[@id="cat"]
div[@id="horse"]
div[@class="bar"]
div[@class="clearall"]
div[@class="foo"]
div[@id="sheep"]
div[@id="monkey"]
div[@class="bar"]
...etc.

我想选择每个组中 div[@class="foo"]div[@class="bar"] 之间的所有 div。我不知道中间会有多少个 div,它各不相同。

我曾尝试考虑先行兄弟和后续兄弟,但后来我只能选择与已知 div“最接近”的 div。

最佳答案

是的,这是可能的。这里的技巧是使用 Scrapy XSLT extensions 中的集合操作.

想法是,对于每个 div[@class='foo'],选择它之后的所有内容减去 div[@class='bar'] 之后的内容

这是 Scrapy shell 中的示例,使用我在本地创建的 HTML:

>>> print response.body
<div class="foo"></div>
<div id="dog"></div>
<div id="cat"></div>
<div id="horse"></div>
<div class="bar"></div>
<div class="clearall"></div>
<div class="foo"></div>
<div id="sheep"></div>
<div id="monkey"></div>
<div class="bar"></div>

>>> after_foo = "following::*[not(@class='bar')]"
>>> after_first_bar = "./following::div[@class='bar'][1]/following::*"
>>> xpath_diff = "set:difference(%s, %s)" % (after_foo, after_first_bar)
>>> for foo in response.xpath("//div[@class='foo']"):
...: print foo.xpath(diff_xpath).extract()
...:
[u'<div id="dog"></div>', u'<div id="cat"></div>', u'<div id="horse"></div>']
[u'<div id="sheep"></div>', u'<div id="monkey"></div>']

关于python - 用于提取两个已知 div 之间的所有内容的 Xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30218529/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com