如何使用scrapy连接到(SQLite,Mysql,Mongodb,Redis)数据库,并把爬取的数据存储到相应的数据库中。

一、SQLite

1.修改pipelines.py文件加入如下代码

# 爬取到的数据写入到SQLite数据库
import sqlite3 class SQLitePipeline(object): #打开数据库
def open_spider(self, spider):
db_name = spider.settings.get('SQLITE_DB_NAME', 'scrapy.db') self.db_conn = sqlite3.connect(db_name)
self.db_cur = self.db_conn.cursor() #关闭数据库
def close_spider(self, spider):
self.db_conn.commit()
self.db_conn.close() #对数据进行处理
def process_item(self, item, spider):
self.insert_db(item)
return item #插入数据
def insert_db(self, item):
values = (
item['upc'],
item['name'],
item['price'],
item['review_rating'],
item['review_num'],
item['stock'],
) sql = 'INSERT INTO books VALUES(?,?,?,?,?,?)'
self.db_cur.execute(sql, values)

2.修改settings.py文件,加入如下代码

# sqlite 配置
SQLITE_DB_NAME = 'scrapy.db'

在settings启动管道文件

ITEM_PIPELINES = {
'toscrape_book.pipelines.SQLitePipeline': 400,
}

二、mysql

1.修改pipelines.py文件加入如下代码

# 爬取到的数据写入到MySQL数据库
import pymysql
class MySQLPipeline(object): # 打开数据库
def open_spider(self, spider):
db = spider.settings.get('MYSQL_DB_NAME','scrapy_db')
host = spider.settings.get('MYSQL_HOST', 'localhost')
port = spider.settings.get('MYSQL_PORT', 3306)
user = spider.settings.get('MYSQL_USER', 'root')
passwd = spider.settings.get('MYSQL_PASSWORD', '123456') self.db_conn =pymysql.connect(host=host, port=port, db=db, user=user, passwd=passwd, charset='utf8')
self.db_cur = self.db_conn.cursor() # 关闭数据库
def close_spider(self, spider):
self.db_conn.commit()
self.db_conn.close() # 对数据进行处理
def process_item(self, item, spider):
self.insert_db(item)
return item #插入数据
def insert_db(self, item):
values = (
item['upc'],
item['name'],
item['price'],
item['review_rating'],
item['review_num'],
item['stock'],
) sql = 'INSERT INTO books VALUES(%s,%s,%s,%s,%s,%s)'
self.db_cur.execute(sql, values)

2.修改settings.py文件,加入如下代码

# mysql 配置
MYSQL_DB_NAME = 'scrapy_db'
MYSQL_HOST = '127.0.0.1'
MYSQL_USER = 'root'
MYSQL_PASSWORD = '123456'

在settings启动管道文件

ITEM_PIPELINES = {
'toscrape_book.pipelines.MySQLPipeline': 401,
}

三、mongodb

1.修改pipelines.py文件加入如下代码

# 爬取到的数据写入到Mongodb数据库
from pymongo import MongoClient
from scrapy import Item class MongoDBPipeline(object): # 打开数据库
def open_spider(self, spider):
db_uri = spider.settings.get('MONGODB_URI', 'mongodb://localhost:27017')
db_name = spider.settings.get('MONOGDB_DB_NAME', 'scrapy_db') self.db_client = MongoClient(db_uri)
self.db = self.db_client[db_name] # 关闭数据库
def close_spider(self, spider):
self.db_client.close() # 对数据进行处理
def process_item(self, item, spider):
self.insert_db(item)
return item # 插入数据
def insert_db(self, item):
if isinstance(item, Item):
item = dict(item)
self.db.books.insert(item)

2.修改settings.py文件,加入如下代码

# mongodb 配置
MONGODB_URI = 'mongodb://127.0.0.1:27017'
MONGODB_DB_NAME = 'scrapy_db'

在settings启动管道文件

ITEM_PIPELINES = {
'toscrape_book.pipelines.MongoDBPipeline': 403,
}

四、redis

1.修改pipelines.py文件加入如下代码

# 爬取到的数据写入到redis数据库
import redis
from scrapy import Item class RedisPipeline(object): # 打开数据库
def open_spider(self, spider):
db_host = spider.settings.get('REDIS_HOST', 'localhost')
db_port = spider.settings.get('REDIS_PORT', 6379)
db_index = spider.settings.get('REDIS_DB_INDEX', 0) self.db_conn = redis.StrictRedis(host=db_host, port=db_port, db=db_index)
self.item_i = 0 # 关闭数据库
def close_spider(self, spider):
self.db_conn.connection_pool.disconnect() # 处理数据
def process_item(self, item, spider):
self.insert_db(item)
return item # 插入数据
def insert_db(self, item):
if isinstance(item, Item):
item = dict(item) self.item_i += 1
self.db_conn.hmset('book:{}'.format(self.item_i), item)

2.修改settings.py文件,加入如下代码

# redis 配置
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
REDIS_DB_INDEX = 0

在settings启动管道文件

ITEM_PIPELINES = {
'toscrape_book.pipelines.RedisPipeline': 404,
}

scrapy 连接各数据的设置并不复杂,首先在pipelines文件中建立管道,建立个数据的连接,然后处理数据,关闭连接。接下来我们在settings文件中定义各类数据库的基本配置,然后在item_pipelines中启动相应的管道

Scrapy连接到各类数据库(SQLite,Mysql,Mongodb,Redis)的更多相关文章

  1. 数据库们~MySQL~MongoDB~Redis

    mysql基础 mysql进阶 python操作mysql MongoDB Redis

  2. Python交互数据库(Mysql | Mongodb | Redis)

    数据库 Mysql Mysql MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,后来被Sun公司收购,Sun公司后来又被Oracle公司收购,目前属于Oracle旗下产品 MyS ...

  3. 通过ssh管道连接内网数据库(mysql)

    公网连接内网数据库(如云数据库)时,通常需要白名单:如果不是白名单IP,通常需要一个跳板机(类似代理)来连接内网数据库, 下方以mysql为例(其他数据库基本一致): import pymysql a ...

  4. 云服务器配置 docker java mysql mongodb redis nginx 环境

    磁盘挂载 fdisk -l #查看磁盘列表 mkfs.ext4 /dev/vdb #格式化磁盘 mount /dev/vdb /data #挂载磁盘在/data echo '/dev/vdb /dat ...

  5. python 连接操作 各类数据库

    转载自MySQL Loners 一,python 操作 MySQL:详情见:这里 #!/bin/env python # -*- encoding: utf-8 -*- #-------------- ...

  6. Python学习笔记 使用数据库SQlite Mysql

    SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用当中, 甚至在IOS和Android的APP中都可以集成 Python就内 ...

  7. Java使用JDBC连接随意类型数据库(mysql oracle。。)

    package cn.liz.test; import java.io.InputStream; import java.sql.Connection; import java.sql.Driver; ...

  8. linux中mysql,mongodb,redis,hbase数据库操作

    .实验内容与完成情况:(实验具体步骤和实验截图说明) (一) MySQL 数据库操作 学生表 Student Name English Math Computer zhangsan lisi 根据上面 ...

  9. Springboot整合Mybatis,连接多个数据库(Mysql+Oracle)

    maven依赖,需要注意的是mysql使用的版本 1 <dependencies> 2 <dependency> 3 <groupId>com.oracle.dat ...

随机推荐

  1. 中国移动携手华为百度展示5G应用,实现8K视频传输

    在今日举行的 2019 年百度云智峰会上,中国移动携手华为和百度,首次展示基于 SA 架构的 5G Vertical LAN (行业局域网)技术,承载 8K 实时会议系统,助力企业云办公.该技术可为合 ...

  2. matlab中自带的sobol的函数提供的sobol序列

    clc; clear all; close all; M=;% 维度,几个参数 nPop=; VarMin=[0.6, 0.10, 0.002, 0.02, 0.17, 0.0, 0.17, 0.0, ...

  3. hibernate 插入date值到postgresql,丢失时分秒

    用hibernate插入java.util.Date数据时发现 时分秒 会丢失.如 2014-05-30 15:59:16.921 在postgresql数据库中显示2014-05-30 00:00: ...

  4. slf4j NoSuchMethodError 错误 ---- 版本冲突

    java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/Stri ...

  5. 汉诺塔(思维、DP思想)

    链接:https://ac.nowcoder.com/acm/contest/3007/C来源:牛客网 题目描述 现在你有 N 块矩形木板,第 i 块木板的尺寸是 Xi*Yi,你想用这些木板来玩汉诺塔 ...

  6. 吴裕雄--天生自然C++语言学习笔记:C++ 存储类

    存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期.这些说明符放置在它们所修饰的类型之前.下面列出 C++ 程序中可用的存储类: auto register static extern m ...

  7. 常用模块-正则re

    常用模块之正则模块 """ 正则表达式与re模块的关系 1.正则表达式是一门独立的技术,任何语言均可使用 2.python中要想使用正则表达式需要通过re模块 " ...

  8. DQL单表查询

    DQL数据查询语言数据查询关键字:select 对数据库关系表中的数据进行查询 创建数据库创建表格学生表(学号s_no,姓名s_name,班级s_classno,课程s_courseno) 班级表(班 ...

  9. 判断苹果和安卓端或者wp端

    window.onload = function() { var u = navigator.userAgent; if(u.indexOf('Android') > -1 || u.index ...

  10. 洛谷 P5664 Emiya 家今天的饭(84分)

    题目传送门 解题思路: 对于每一个列c,f[i][j][k]表示到第i行,第c列选了j个,其它列一共选了k个,然后我们读题意发现只要j>k,那就一定是不合法的,然后统计所有方案,减去所有不合法方 ...