[爬蟲技巧] Scrapy中定製寫入CSV檔案的Pipeline
阿新 • • 發佈:2018-11-22
前言:
在使用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,
}
如有疑問,歡迎留言。