pipeline是清洗數(shù)據(jù)存入數(shù)據(jù)庫的
清洗數(shù)據(jù)看每個(gè)人的需求,但是存入數(shù)據(jù)庫是有套路的痕寓。
就是在這個(gè)class里有三個(gè)def傲醉,一個(gè)是open_spider,一個(gè)是close_spider呻率,一個(gè)是process_item硬毕,存入sqlite3基本都是這個(gè)套路,需要注意的是數(shù)據(jù)庫的列名要和items的一致礼仗。
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import sqlite3
class ZdmPipeline(object):
def open_spider(self,spider):
self.conn = sqlite3.connect('test.sqlite')
self.cur = self.conn.cursor()
self.cur.execute('CREATE TABLE IF NOT EXISTS sm(name varchar(100),price varchar(50))')
def close_spider(self,spider):
self.conn.commit()
self.conn.close()
def process_item(self, item, spider):
sql = 'insert into sm({}) VALUES ({})'
col = ','.join(item.keys())
holder = ','.join(len(item)*'?')
self.cur.execute(sql.format(col,holder),list(item.values()))
return item
最后按照注釋所說去settings把對(duì)應(yīng)的pipeline打開吐咳,就是取消注釋逻悠。
如果有多個(gè)需求比如要先處理數(shù)據(jù)然后在存入數(shù)據(jù)庫,就寫多個(gè)class韭脊,然后在settings里添加多個(gè)pipeline童谒,數(shù)字小的先開始運(yùn)行。