保存到Redis数据库
保存到数据库和保存到文件中格式类似的,只不过初始化的时候,将本来是打开文件的操作,转为连接数据库的操作。写入的时候将本来是写入到文件的操作转为写入到数据库中的操作。以 Redis 数据库为例:
# 这个是保存到redis class RedisPipeline(object): def __init__(self): ## 初始化链接 reids self.redis_cli = redis.StrictRedis( host=‘127.0.0.1‘, port=6379, db=1, ) def process_item(self, item, spider): ## 保存到redis self.redis_cli.lpush(‘quotes‘, json.dumps(dict(item))) return item def close_spider(self, spider): self.redis_cli.close()
Python爬虫、数据分析、网站开发等案例教程视频免费在线观看
https://space.bilibili.com/523606542
Python学习交流群:1039649593
保存到MySQL数据库
# 这个是保存到mysql class MySQLPipeline(object): """ create database quotes charset=utf8; use quotes; create table quotes (txt text, author char(20), tags char(200)); """ def __init__(self): self.connect = pymysql.connect( host=‘192.168.159.128‘, port=3306, db=‘quotes‘, # 数据库名 user=‘windows‘, passwd=‘123456‘, charset=‘utf8‘, use_unicode=True ) # 创建操作数据的游标 self.cursor = self.connect.cursor() def process_item(self, item, spider): # 保存到mysql # 执行sql语句 self.cursor.execute( ‘insert into quotes (txt, author, tags) value(%s, %s, %s)‘, (item[‘text‘], item[‘author‘], item[‘tags‘]) ) # 提交数据执行数据 self.connect.commit() return item # 关闭链接 def close_spider(self, spider): self.cursor.close() self.connect.close()
将数据存入MongoDB
有时,我们想把爬取到的数据存入某种数据库中,可以实现Item Pipeline完成此类任务。下面实现一个能将数据存入MongoDB数据库的Item Pipeline,代码如下:
对上述代码解释如下。
在类属性中定义两个常量:
- DB_URI 数据库的URI地址。
- DB_NAME 数据库的名字。
from scrapy.item import Item import pymongo class MongoDBPipeline(object): DB_URI = ‘mongodb://localhost:27017/‘ DB_NAME = ‘scrapy_data‘ def open_spider(self, spider): self.client = pymongo.MongoClient(self.DB_URI) self.db = self.client[self.DB_NAME] def close_spider(self, spider): self.client.close() def process_item(self, item, spider): collection = self.db[spider.name] post = dict(item) if isinstance(item, Item) else item collection.insert_one(post) return item