保存到 json 文件

pipelines.py

import json

class ItfunspiderPipeline(object):
    # 定义构造器,初始化要写入的文件
    def __init__(self):
        self.json_file = open("course.json", "wb+")
        self.json_file.write('[\n'.encode("utf-8"))
    # 重写close_spider回调方法,用于关闭文件
    def close_spider(self, spider):
        print('----------关闭文件-----------')
        # 后退2个字符,也就是去掉最后一条记录之后的换行符和逗号
        self.json_file.seek(-2, 1)
        self.json_file.write('\n]'.encode("utf-8"))
        self.json_file.close()
    def process_item(self, item, spider):
        # 将item转换成JSON字符串
        text = json.dumps(dict(item), ensure_ascii=False) + ",\n"
        # 写入JSON字符串
        self.json_file.write(text.encode("utf-8"))

运行 scrapy crawl course 后,根目录下会生成 course.json

保存到 MySQL 数据库

自行在建立数据库后,创建表

CREATE TABLE `course` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `url` varchar(255) DEFAULT NULL,
  `image` varchar(255) DEFAULT NULL,
  `date` varchar(255) DEFAULT NULL,
  `likes` varchar(500) DEFAULT NULL,
  `tags` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

pipelines.py

import mysql.connector


class ItfunspiderPipeline(object):
    def __init__(self):
        self.conn = mysql.connector.connect(user='root', password='root',
                                            host='localhost', port='3306',
                                            database='itfun_test', use_unicode=True)
        self.cur = self.conn.cursor()

    # 重写close_spider回调方法,用于关闭数据库资源
    def close_spider(self, spider):
        print('----------关闭数据库资源-----------')
        # 关闭游标
        self.cur.close()
        # 关闭连接
        self.conn.close()

    def process_item(self, item, spider):
        self.cur.execute("INSERT INTO course VALUES(null, %s, %s, %s, %s, %s, %s)",
                         (item['title'], item['url'], item['image'],
                          item['date'], item['likes'], item['tags']))
        self.conn.commit()

运行 scrapy crawl course 后,会将所有数据存入数据库中