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

时间:2013-05-15 14:51:12

标签: python scrapy

我想废弃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>']

前两个价格适用于相同的商品....同样适用于第二个商品......但其余的只有一个价格......任何人都可以建议我解决这个问题....

1 个答案:

答案 0 :(得分:2)

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'])

我希望你能继续下去!