Python scrapy框架教学(四):保存到数据库

保存到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

 

Python scrapy框架教学(四):保存到数据库

上一篇:用JdbcTemplate方式连接mysql


下一篇:Oracle处理保留小数点