2015-10-20 65 views
3

我正在構建一個刮板以從網站獲取產品價格。Scrapy:無法從我的項目數據中刪除unicode(價格)

此刻,我有以下代碼:

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」

在此先感謝!

+0

Woops ..好吧。我的問題是:如何使輸出可讀。要麼「5.00€」(\ u20ac)或只是「5.00」 – Demandar

+0

然後回答是:您的輸出已經可讀,'\ u20ac' == =='''。你看到它的unicode表示,但是如果你做'print item ['price'] [0]',你會看到它在那裏。 – eLRuLL

回答

1

最簡單的方法可能是分裂一次,用十進制替換任何逗號:

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

,將讓你與5.00。因爲你有一個*在字符串中不起作用,所以你可以通過這個字符來剝離我,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 
+0

非常感謝。完美工作!我仍然在學python,這是我第一次看到分裂(無,1)。 – Demandar

+1

@Demandar,只是意味着在任何空白處分割一次,我們只需要在第一個空白之前的第一項,這樣就不會分割整個字符串。如果你想使用拆分方法,並保持符號,你可以'拆分(無,2)' –

+0

明白了!謝謝。不應該替換(「\ n」,「」)工作? – Demandar