2

Web サイトをスクラップして、アイテムの次の価格を抽出したいのですが 、同じアイテムに複数の価格があります。アイテムの価格を正しく除外するにはどうすればよいですか。

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

最初の 2 つの価格は同じアイテムの場合....2 番目のアイテムの場合も同様です...しかし、残りの価格は 1 つのみです...誰もこれを解決する方法を提案できますか....

4

1 に答える 1

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

あなたがそれを続けられることを願っています!

于 2013-05-15T16:30:14.743 に答える