Scrapy中將item轉存到數據庫


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM