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