Skip to main content
 首页 » 编程设计

python之如何在 Scrapy 中使用正则表达式

2024年11月01日36sxdcgaq8080

我想抓取 website 并提取商品的以下价格,但同一商品有多个价格,我该如何正确过滤商品的价格..

这是解析 page=1 上商品价格的代码:

hxs.select("//div[@class='category-products']/ul/li//div[@class='price-box']//span[@class='price']").extract() 

给出:

[u'<span class="price" id="old-price-8963">\n                    \u20b9 8,990                </span>', 
 u'<span class="price" id="product-price-8963">\n                    \u20b9 5,990                </span>', 
 u'<span class="price" id="old-price-8940">\n                    \u20b9 8,990                </span>', 
 u'<span class="price" id="product-price-8940">\n                    \u20b9 5,990                </span>', 
 u'<span class="price">\u20b9 7,990</span>', 
 u'<span class="price">\u20b9 7,990</span>', 
 u'<span class="price">\u20b9 7,990</span>', 
 u'<span class="price">\u20b9 7,990</span>', 
 u'<span class="price">\u20b9 7,990</span>', 
 u'<span class="price">\u20b9 2,990</span>'] 

前两个价格是针对相同商品的……第二个商品的价格也类似……但其余的只有一个价格……有人能建议我解决这个问题的方法吗……

请您参考如下方法:

l = [u'<span class="price" id="old-price-8963">\n                    \u20b9 8,990                </span>', 
 u'<span class="price" id="product-price-8963">\n                    \u20b9 5,990                </span>', 
 u'<span class="price" id="old-price-8940">\n                    \u20b9 8,990                </span>', 
 u'<span class="price" id="product-price-8940">\n                    \u20b9 5,990                </span>', 
 u'<span class="price">\u20b9 7,990</span>', 
 u'<span class="price">\u20b9 7,990</span>', 
 u'<span class="price">\u20b9 7,990</span>', 
 u'<span class="price">\u20b9 7,990</span>', 
 u'<span class="price">\u20b9 7,990</span>', 
 u'<span class="price">\u20b9 2,990</span>'] 
>>> s =set() 
>>> for x in l: 
    import re 
    if not 'old-price' in x: 
        m = re.match('<span[^>]*>([^<]*)</span>', x) 
        if m is None: 
            print x 
        s.add(m.group(1).strip()) 
 
 
>>> s 
set([u'\u20b9 5,990', u'\u20b9 2,990', u'\u20b9 7,990']) 

希望你能坚持下去!