Scrapy:无法从我的商品数据中剥离unicode(价格)

时间:2015-10-20 22:04:19

标签: python python-2.7 web-crawler scrapy scrapy-spider

我正在建立一个刮板来从网站上获取产品价格。

目前我有以下代码:

def parse(self, response):
    for tank in response.xpath('//html/body/div/div[4]/div/div/div/table[1]/tr/td/div/span/span'):
        item = VapeItem()
        item["price"] = tank.xpath("text()").extract()
        yield item

这是json输出:

{"price": ["5,00 \u20ac\n  \n    \n  \n  \n  \n      *\n    \n  \n  \n    "]},

我尝试过编码(" utf-8"),剥离,替换,但似乎没有任何效果。

我的问题是:如何使输出可读。制作" 5.00€" (\ u20ac)或只是" 5.00"

提前致谢!

1 个答案:

答案 0 :(得分:1)

最简单的方法可能是拆分一次并用小数替换任何逗号:

item["price"] = tank.xpath("text()").extract()[0].split(None,1)[0].replace(",",".")

这会让你5.00。因为字符串条中的*不起作用,你可以传递该字符来剥离i,e [0].rstrip("\n* ")但是如果有其他错误的字符会破坏。

如果您也想要欧元符号,可以decode('unicode-escape')

d={"price": ["5,00 \u20ac\n  \n    \n  \n  \n  \n      *\n    \n  \n  \n    "]}

d["price"] = d["price"][0].decode('unicode-escape').rstrip("\n * ").replace(",",".")

print(d["price"])
5.00 €

如果你想将它与拆分结合起来并保留标志,也可以将它格式化得更好:

p,s,_ = d["price"][0].split(None, 2)

d["price"] = u"{}{}".format(s.decode("unicode_escape"),p.replace(",","."))

print(d["price"])

哪个会给你:

€5.00