目前我的spider根據需要獲取結果,但是以unicode編碼(UTF-8,我相信)。當我將這些結果保存到csv時,我需要做大量的清理工作,其中包含Scrapy插入的所有其他字符。Scrapy Python spider:以拉丁-1而不是unicode存儲結果
如何將結果存儲爲拉丁字符,&不是unicode。我需要做哪些改變?
謝謝。 -TM
目前我的spider根據需要獲取結果,但是以unicode編碼(UTF-8,我相信)。當我將這些結果保存到csv時,我需要做大量的清理工作,其中包含Scrapy插入的所有其他字符。Scrapy Python spider:以拉丁-1而不是unicode存儲結果
如何將結果存儲爲拉丁字符,&不是unicode。我需要做哪些改變?
謝謝。 -TM
如果您的問題與您所說的相同,則解決方案與投射到字符串一樣簡單。
>>> a = u'spam and eggs'
>>> a
u'spam and eggs'
>>> type(a)
<type 'unicode'>
>>> b = str(a)
>>> b
'spam and eggs'
>>> type(b)
<type 'str'>
編輯: 明知異常可能發生,可能是在嘗試把這個包以及除
try:
str(a)
except UnicodeError:
print "Skipping string %s" % a
如果字符串包含非ASCII字符,這會引發'UnicodeEncodeError'。 –
在編輯中解決。 –
的item_extracted的類型是Unicode的一個好主意。其中,它的提取(在解析功能),或在item pipeline或output processor
最簡單的辦法就是這一行添加到您的解析函數
item_to_be_stored = item_extracted.encode('latin-1','ignore')
或者你可以定義一個函數,可以將其編碼爲拉丁文在您的項目類中。
from scrapy.utils.python import unicode_to_str
def u_to_str(text):
unicode_to_str(text,'latin-1','ignore')
class YourItem(Item):
name = Field(output_processor=u_to_str())
謝謝@buffer。我覺得在項目管道中有這個意義。不確定你的代碼應該在哪裏。我目前的項目管道如下所示:class MyPipeline(object): def process_item(self,item,spider): return item – user818190
@ user818190請參閱編輯器答案 – Medorator
unicode_to_str()是否需要參數?我得到錯誤說至少需要1個參數;我試過unicode_to_str('latin-1','ignore'),但沒有運氣,我繼續把數據包裝在[u'中。我錯過了什麼嗎? – user818190
你的問題不是unicode,而是你用來打開它的任何程序都期望latin-1。當您打開它以使用UTF-8作爲字符編碼時,它應該有一個選項。 –
您也可以使用scrapy.utils.python中的unicode_to_str函數,將編碼設置爲'latin-1',將錯誤設置爲'ignore' – Medorator
如果問題解決了,則Plz接受答案 – Medorator