You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scrapy中如何正确使用:not CSS选择器排除指定文本

Scrapy中CSS :not伪类的正确用法(排除指定子元素文本)

你之前的问题出在CSS选择器的范围限定上——你写的div.entry-content div:not([id='jp-post-flair']) ::text只选中了div.entry-content下非目标div的其他div元素的文本,反而漏掉了p、span等其他标签的内容,同时错误地返回了目标div之外的div文本,这就是为什么得到的是不需要的内容。

正确的:not用法示例

要实现"获取父div下所有文本,排除指定子div及其内部内容",可以用以下两种方式:

1. 排除直接子元素中的目标div

如果目标div是div.entry-content的直接子元素,用这个选择器更精准:

response.css("div.entry-content > *:not(#jp-post-flair) ::text").getall()

这里的>表示只选择父元素的直接子元素,*:not(#jp-post-flair)匹配所有直接子元素中ID不是jp-post-flair的元素,再取它们的文本。

2. 排除所有后代中的目标div及其子元素

如果目标div可能嵌套在其他元素里,需要排除它本身和所有子元素的文本,用这个:

response.css("div.entry-content *:not(#jp-post-flair):not(#jp-post-flair *) ::text").getall()

*:not(#jp-post-flair)排除目标div本身,:not(#jp-post-flair *)排除目标div下的所有子元素,这样就能获取到父div下除目标区域外的所有文本。

补充说明

你后来用div.entry-content > p ::text直接获取p标签文本的方式,在页面结构固定的情况下更高效,但如果页面后续新增了其他需要抓取的标签(比如h3、span),用:not的方式会更灵活,不需要修改选择器就能覆盖所有非排除区域的内容。

内容的提问来源于stack exchange,提问作者Kyle A.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:15:50