Scrapy使用通配符选择Magento站点动态ID的价格元素
解决Magento站点动态ID价格元素的抓取问题
嘿,我懂你碰到的这个麻烦!Magento喜欢给元素ID加随机后缀,确实容易让新手卡壳。你之前试的starts-with思路是对的,可能是写法上出了点小问题,我给你整理几种靠谱的方法:
方法1:正确使用XPath的starts-with
你之前写的是starts-with(@class,"price-including-tax-"),但目标元素的ID才是带可变后缀的,不是class!所以应该针对@id来写:
//span[starts-with(@id, "price-including-tax-")]/text()
这样就能匹配所有ID以price-including-tax-开头的<span>元素,不管后面的数字是什么。
方法2:用XPath的contains做模糊匹配
如果有时候前缀可能有小变化,也可以用contains来匹配ID里包含指定字符串的元素:
//span[contains(@id, "price-including-tax")]/text()
这个更宽松,只要ID里有price-including-tax这段内容就能匹配到。
方法3:CSS选择器的属性前缀匹配
Scrapy也支持CSS选择器的属性前缀匹配,写法更简洁:
span[id^="price-including-tax-"]::text
这里的^=表示“属性值以指定字符串开头”,和XPath的starts-with效果完全一致。
额外小提示
如果页面里有多个符合条件的价格元素,你可能需要进一步缩小范围,比如结合它的父元素或者相邻元素来定位,避免抓错内容:
//div[@class="product-info-main"]//span[starts-with(@id, "price-including-tax-")]/text()
这样能确保你抓的是当前商品的价格,而不是页面其他地方的价格。
你可以把这些表达式放到Scrapy的response.xpath()或者response.css()里试试,应该就能顺利拿到价格了!
内容的提问来源于stack exchange,提问作者djnouri
相关产品推荐
相关产品推荐

