如何在Scrapy的CSS选择器中使用正则表达式匹配动态类名
解决Scrapy中匹配类名带可变两位字母的ul标签问题
你可以利用Scrapy扩展的CSS伪类:regex()来实现正则匹配属性,完美适配你这种类名只有末尾两位字母变化的场景。
核心代码示例
针对你的需求,直接用正则匹配class属性:
img_ul = response.css('ul:regex(class, product-gallery[a-z]{2}__thumbs)') print(img_ul)
如果目标ul标签的class属性可能包含多个类名(比如<ul class="extra-class product-galleryfp__thumbs">),可以调整正则,确保能匹配到包含目标模式的class:
img_ul = response.css('ul:regex(class, .*product-gallery[a-z]{2}__thumbs.*)')
代码说明
ul:指定只匹配ul标签,避免误选其他标签:regex(class, 正则表达式):Scrapy特有的CSS伪类,专门用来对指定属性应用正则匹配product-gallery[a-z]{2}__thumbs:正则规则表示:以product-gallery开头,紧跟2个小写字母,最后是__thumbs,完全匹配你给出的类名模式- 前后加
.*:是为了兼容class属性中存在其他类名的情况,确保只要包含目标类名模式就能被匹配到
备选方案(准确性稍弱)
如果不想用正则,也可以用属性包含匹配,但这种方法可能会误匹配不符合两位字母规则的类名(比如product-galleryabc__thumbs),仅作参考:
img_ul = response.css('ul[class*="product-gallery"][class*="__thumbs"]')
内容的提问来源于stack exchange,提问作者YungOne
相关产品推荐
相关产品推荐

