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

前言:

        在使用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,
}

        如有疑问,欢迎留言。
 

----------------------------------------------------------------  saosao的分割线  ------------------------------------------------------------------------

博主的Coding部落群 588757596,快来一起玩耍!

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
使用 Scrapy 将内容写入 CSV 文件非常简单。在 Scrapy ,你可以使用 CSV 导出器来将数据输出到 CSV 文件。 首先,需要在你的项目的 `settings.py` 文件启用 CSV 导出器。在 `settings.py` 文件末尾添加以下代码: ```python FEED_FORMAT = "csv" FEED_URI = "output.csv" ``` 上述代码会将输出格式设置为 CSV,并将输出文件命名为 `output.csv`。 接下来,在你的 Spider ,你需要定义要写入 CSV 文件的数据。假设你的 Spider 输出一个包含电影名称、导演和评分的字典列表,你可以使用以下代码将其写入 CSV 文件: ```python import scrapy class MySpider(scrapy.Spider): name = "example.com" start_urls = [ "http://www.example.com/1.html", "http://www.example.com/2.html", "http://www.example.com/3.html", ] def parse(self, response): # 解析电影数据 movie_data = [ {"name": "The Shawshank Redemption", "director": "Frank Darabont", "rating": 9.3}, {"name": "The Godfather", "director": "Francis Ford Coppola", "rating": 9.2}, {"name": "The Dark Knight", "director": "Christopher Nolan", "rating": 9.0}, ] # 写入 CSV 文件 for movie in movie_data: yield movie ``` 在上面的代码,我们定义了一个包含电影数据的列表 `movie_data`,然后遍历该列表并使用 `yield` 关键字将每个电影写入 CSV 文件。 当你运行 Spider 时,Scrapy 会自动将数据写入 CSV 文件 `output.csv` 。如果你希望将数据写入不同的文件,可以在 Spider 使用 `FEED_URI` 参数来指定输出文件的路径和名称。例如: ```python import scrapy class MySpider(scrapy.Spider): name = "example.com" start_urls = [ "http://www.example.com/1.html", "http://www.example.com/2.html", "http://www.example.com/3.html", ] custom_settings = { "FEED_FORMAT": "csv", "FEED_URI": "movies.csv" } def parse(self, response): # 解析电影数据 movie_data = [ {"name": "The Shawshank Redemption", "director": "Frank Darabont", "rating": 9.3}, {"name": "The Godfather", "director": "Francis Ford Coppola", "rating": 9.2}, {"name": "The Dark Knight", "director": "Christopher Nolan", "rating": 9.0}, ] # 写入 CSV 文件 for movie in movie_data: yield movie ``` 上述代码,我们使用 `custom_settings` 属性来定义 CSV 导出器的输出格式和文件路径,并将其设置为 `movies.csv`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值