sqlite数据库
在pipelines.py中添加一个新的类:SQLitePipeline,如下内容
import sqlite3 #导入sqlite3模块
class SQLitePipeline(object):#创建一个新的类,用来做保存数据到数据库的工作
def __init__(self,dbname):
self.dbname = dbname#初始化数据库名称,sqlite数据库是一个文件,dbname写成文件名就行,如果在当前目录下,就只写文件名,如果不在,请写上绝对路径
@classmethod#是一个类方法,用@classmethod标识
def from_crawler(cls,crawler):#他的参数crawler,我们就可以拿到scrapy的所有核心组件,如全局配置的每个信息,然后创建一个pipeline实例,参数cls就是class
return cls(dbname=crawler.settings.get('DBNAME'))
#最后返回一个class实例,在settings.py中加入:DBNAME = "你的数据库的名称,如果在当前目录下,就只写文件名,如果不在,请写上绝对路径"
def open_spider(self,spider):#该方法在spider被打开的时候开启,我们可以在这里做一些初始化工作
self.conn = sqlite3.connect(self.dbname)#如连接数据库
self.cx = self.conn.cursor()#创建游标
def process_item(self,item,spider):#该方法才是实际用来存储数据的
data = dict(item)#将item变成字典形式
keys = ','.join(data.keys())#将字典的键值做成“,”隔开的字符串
values = ','.join(['%s'] * len(data))#根据data字典的长度建立对应长度数的“%s”
sql = 'insert into TableName(%s) values (%s)' %(keys,tuple(data.values()))
self.cx.execute(sql)#执行sql语句
self.conn.commit()#提交
return item#返回item
def close_spider(self,spider):#该方法在spider被关闭的时候打开,我们可以在这里做一些收尾工作,
self.conn.close()#例如:关闭数据库
然后在settings.py中打开管道文件:
ITEM_PIPELINES = {
'zhilianzhaopin.pipelines.SQLitePipeline': 300,
}
设置DBNAME
DBNAME = "你的数据库的名称" #,如果在当前目录下,就只写文件名,如果不在,请写上绝对路径
MySQL数据库
在pipelines中添加一个新的类:MySQLPipeline
import pymysql #导入pymysql模块,用来操作MySQL数据库
class MySQLPipeline():
def __init__(self,host,database,user,password,port):
self.host = host
self.database = database
self.user = user
self.password = password
self.port = port
@classmethod#是一个类方法,用@classmethod标识
def from_crawler(cls,crawler):#他的参数crawler,我们就可以拿到scrapy的所有核心组件,如全局配置的每个信息,然后创建一个pipeline实例,参数cls就是class
return cls(
host=crawler.settings.get('MYSQL_HOST')
database=crawler.settings.get('MYSQL_DATABASE')
user=crawler.settings.get('MYSQL_USER')
password=crawler.settings.get('MYSQL_PASSWORD')
port=crawler.settings.get('MYSQL_PORT')
)
def open_spider(self,spider):#该方法在spider被打开的时候开启,我们可以在这里做一些初始化工作
self.db = pymysql.connect(self.host,self.database,self.user,self.password,charset='utf8',self.port)#如连接数据库
self.cursor = self.db.cursor()#创建游标
def process_item(self,item,spider):#该方法才是实际用来存储数据的
data = dict(item)#将item变成字典形式
keys = ','.join(data.keys())#将字典的键值做成“,”隔开的字符串
values = ','.join(['%s'] * len(data))#根据data字典的长度建立对应长度数的“%s”
sql = 'insert into TableName(%s) values (%s)' %(keys,tuple(data.values()))
self.cx.execute(sql)#执行sql语句
self.conn.commit()#提交
return item#返回item
def close_spider(self,spider):#该方法在spider被关闭的时候打开,我们可以在这里做一些收尾工作,
self.conn.close()#例如:关闭数据库
然后在settings.py中打开管道文件:
ITEM_PIPELINES = {
'zhilianzhaopin.pipelines.MySQLPipeline': 300,
}
设置变量
MYSQL_HOST = “127.0.0.1”
MYSQL_DATABASE = “数据库名称”
MYSQL_USER = “用户名”
MYSQL_PASSWORD = “密码”
MYSQL_PORT = 3306