提问人:bur 提问时间:5/25/2023 最后编辑:bur 更新时间:6/1/2023 访问量:25
Scrapy:选择最后一个 decendant 节点?
Scrapy: select last decendant node?
问:
我有一个带有选择器的选项器,我用它来获取数据:dict
for key, selector in selectors.items():
data[key] = response.css(selector).get().strip()
其中一个选择器是 ,但有时文本会包装在附加标记中。我的解决方案是将该条目设为一个列表,包括:span::text
a
span 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()
答:
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
应该想到这一点,谢谢!
评论