网页抓取:如何精准获取仅含js-variant类的元素文本
解决CSS选择器筛选仅含指定类元素的问题
你遇到的问题是因为a.js-variant这个选择器会匹配所有包含js-variant类的元素,不管它是否附带其他类(比如disabled)。要只获取仅带有js-variant类的元素文本,有两种可靠的解决方法:
使用
:not()伪类排除带disabled类的元素:response.css('a.js-variant:not(.disabled) ::text').extract()这个写法会过滤掉所有包含
disabled类的<a>标签,只保留带有js-variant但没有disabled的元素,适用性更广,哪怕元素还有其他非disabled的类也能正常筛选。精确匹配class属性值(仅适用于元素只有
js-variant这一个类的场景):response.css('a[class="js-variant"] ::text').extract()这种写法会严格匹配class属性值恰好为
js-variant的元素,不会匹配那些同时带有disabled类的元素,但如果目标元素有多个类(比如js-variant active),这种方法就会失效。
内容的提问来源于stack exchange,提问作者mouhamad
相关产品推荐
相关产品推荐

