前言:

        在使用Scrapy寫專案時,難免有時會需要將資料寫入csv檔案中,自帶的FEED寫法如下:

        settings.py   (系統:Ubuntu 14)

FEED_URI = 'file:///home/eli/Desktop/qtw.csv'
FEED_FORMAT = 'CSV'

        無需另寫pipeline類,這種寫法是最簡單的。

        但魚和熊掌不可兼得,它的寫法決定了它功能侷限的特性,當我們遇到以下場景時,它無法滿足:

        1、過濾某些item(如包含空欄位或其他非法欄位值的item)

        2、只將某些item欄位寫入csv檔案

        3、item去重

        所以,當有更多需求時,我們仍需要定製自己的專案管道(Pipeline),下面給出具體程式碼片段。

程式碼片段:

        pipelines.py

class Pipeline_ToCSV(object):

    def __init__(self):
        #csv檔案的位置,無需事先建立
        store_file = os.path.dirname(__file__) + '/spiders/qtw.csv'
        #開啟(建立)檔案
        self.file = open(store_file,'wb')
        #csv寫法
        self.writer = csv.writer(self.file)
        
    def process_item(self,item,spider):
        #判斷欄位值不為空再寫入檔案
        if item['image_name']:
            self.writer.writerow((item['image_name'].encode('utf8','ignore'),item['image_urls']))
        return item
    
    def close_spider(self,spider):
        #關閉爬蟲時順便將檔案儲存退出
        self.file.close()

        settings.py

ITEM_PIPELINES = {
    'yourproject.pipelines.Pipeline_ToCSV':100,
}
        如有疑問,歡迎留言。