欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[爬虫技巧] Scrapy中定制写入CSV文件的Pipeline

程序员文章站 2022-05-05 15:26:07
...

前言:

        在使用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,
}
        如有疑问,欢迎留言。

相关标签: scrapy pipeline