Scrapy:选择最后一个 decendant 节点?

Scrapy: select last decendant node?

提问人:bur 提问时间:5/25/2023 最后编辑:bur 更新时间:6/1/2023 访问量:25

问:

我有一个带有选择器的选项器,我用它来获取数据:dict

for key, selector in selectors.items():
    data[key] = response.css(selector).get().strip()

其中一个选择器是 ,但有时文本会包装在附加标记中。我的解决方案是将该条目设为一个列表,包括:span::textaspan a::text

for key, selector in selectors.items():
    if type(selector) == list:
        for sel in selector:
            data[key] = response.css(sel).get().strip()
            if data[key] not in ["", None]: break
    else:
        data[key] = response.css(selector).get().strip()

有没有办法更改选择器,以便无论是否有标签,它都能获得我想要的文本?我希望脚本是一行。a.get().strip()

Python Scrapy 选择器

评论


答:

1赞 Alexander 5/27/2023 #1

当然,你可以只使用 .'span *::text'

演示:

In [1]: from scrapy.selector import Selector

In [2]: html1 = '<span><a>text contents</a></span>'

In [3]: html2 = '<span>text contents</span>'

In [4]: selector1 = Selector(text=html1)

In [5]: selector2 = Selector(text=html2)

In [6]: selector1.css('span *::text').get().strip()
Out[6]: 'text contents'

In [7]: selector2.css('span *::text').get().strip()
Out[7]: 'text contents'

评论

1赞 bur 5/30/2023
应该想到这一点,谢谢!