python 写csv scrapy_Scrapy 爬虫(3):爬取数据不保存,就是耍流氓

(给Python开发者加星标,提升Python技能)

作者:Zone (本文来自作者投稿)

前言

通过前面两篇文章《爬虫利器 Scrapy 初体验(1)》《Scrapy 爬虫(2):听说你的爬虫又被封了?》,我们初体验也过了,爬虫代码健壮性也升级为 PLUS 了。都分析到这个地步了,是不是感觉还少了点什么?对,我们还没保存数据呀?不保存,这不是瞎忙活吗?

Items

item 是我们保存数据的容器,其类似于 python 中的字典。使用 item 的好处在于: Item 提供了额外保护机制来避免拼写错误导致的未定义字段错误。且看栗子:

import scrapy

Pipelines

pipelines.py 一般我们用于保存数据,其方法的一些介绍如下图。下面,我会分多种方式来保存我们的数据,避免你耍流氓。

c413d7776256b15a4dad76442f3d0633.png
9595fb473b5f6082be193f74b9826cc2.png

保存到 Json

import json
fed91859430bceb64d330ac34aace458.png

保存到 CSV

def appendDta2Csv(self, file_name, new_headers, new_data):
2e7aeaebdeabfeb49631f19bde0c8c0b.png

保存到 MongoDB

from pymongo import MongoClient
import os
base_dir = os.getcwd()
class MongoPipeline(object):
    # 实现保存到mongo数据库的类,
    collection = 'douban'  # mongo 数据库的 collection 名字

    def __init__(self, mongo_uri, db_name, db_user, db_pass):
        self.mongo_uri = mongo_uri
        self.db_name = db_name
        self.db_user = db_user
        self.db_pass = db_pass

    @classmethod
    def from_crawler(cls, crawler):
        # scrapy 为我们访问settings提供了这样的一个方法,这里,
        # 我们需要从 settings.py 文件中,取得数据库的URI和数据库名称
        return cls(
            mongo_uri=crawler.settings.get('MONGO_URI'),
            db_name=crawler.settings.get('DB_NAME'),
            db_user=crawler.settings.get('DB_USER'),
            db_pass=crawler.settings.get('DB_PASS'))

    def open_spider(self, spider):  # 爬虫启动时调用,连接到数据库
        self.client = MongoClient(self.mongo_uri)
        self.zfdb = self.client[self.db_name]
        self.zfdb.authenticate(self.db_user, self.db_pass)

    def close_spider(self, spider):  # 爬虫关闭时调用,关闭数据库连接
        self.client.close()

    def process_item(self, item, spider):
        self.zfdb[self.collection].insert({"title": item["title"].strip()})
        return item
6095de3e4580a7e3a014c360357ad9df.png

保存到 MySQL

and
c08fa3381b59b7d99d68b22b29ac87db.png

在写好相关的 pipeline 之后,需要在 settings.py 中启用相关的 pipeline,后面的数字为调用的优先级,数字是0-1000,你可以自定义。你可以所有格式都保存,也可以注释掉其他,值保留一个。

ITEM_PIPELINES = {
    'doubanTop250.pipelines.MongoPipeline': 300,
    'doubanTop250.pipelines.MysqlPipeline': 301,
    'doubanTop250.pipelines.CsvPipeline': 302,
    'doubanTop250.pipelines.JsonPipeline': 303,
}

瞎比比

数据保存就说到这里了,给公号发送「20190103」获取源码。

【本文作者】

Zone:一只爱折腾的后端攻城狮,喜欢写文分享。个人公众号:zone7

推荐阅读

(点击标题可跳转阅读)

用 Python 全自动下载抖音小姐姐视频

爬取虎嗅 5 万篇文章告诉你怎么样取标题

爬虫进阶:反反爬虫技巧

觉得本文对你有帮助?请分享给更多人

关注「Python开发者」加星标,提升Python技能

2d67db9080f3a12673bbe2b174fffd09.png

喜欢就点一下「好看」呗~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值