Scrapy如何选择最后后代节点?优化选择器实现单行代码获取文本
解决方案
直接修改CSS选择器就能实现需求,不用写分支判断逻辑,代码可以回到简洁的单行形式。
修改后的选择器
把原来的span::text替换成:
span::text, span a::text
这个选择器会同时匹配两种情况的文本节点:
- span标签下的直接文本内容
- span标签内部a标签里的文本内容
简化后的代码
将原来的单行逻辑调整为用getall()获取所有匹配文本后合并,再做strip处理:
for key, selector in selectors.items(): data[key] = ''.join(response.css(selector).getall()).strip()
原理说明
response.css(selector).getall()会返回所有匹配到的文本组成的列表,不管文本是在span直接节点还是内部a标签里''.join()把列表里的文本拼接成完整字符串- 最后
strip()去除首尾空白字符
这样不管目标文本是否被a标签包裹,都能一次性获取到,代码回到了简洁的单行处理形式,不需要额外的分支判断。
内容的提问来源于stack exchange,提问作者bur
相关产品推荐
相关产品推荐

