在使用Scrapy框架时,面对多个爬虫此时每个爬虫爬取的数据都来自不同的网站或者不同的数据的时候,就需要高效率的将数据存储到数据库。这里就用到了异步机制来保存数据
好了,不BB了。show code :
class MysqlTwistedPipeline(object):
#采用异步的机制写入mysql
def __init__(self,dbpool):
self.dbpool =dbpool
@classmethod
def from_settings(cls,settings):
dbparms = dict(
host = "127.0.0.1",#settings["MYSQL_HOST"],
db = "bitcoin",#settings["MYSQL_DBNAME"],
user ="root",#settings["MYSQL_USER"]
password ="root",#settings["MYSQL_PASSWORD"],
charset="utf8",
use_unicode =True,#不然没办法保存中文
cursorclass = MySQLdb.cursors.DictCursor
)
dbpool = adbapi.ConnectionPool("MySQLdb",**dbparms)
return cls(dbpool)
def process_item(self,item,spider):
##使用twisted将mysql插入变成异步执行
query = self.dbpool.runInteraction(self.do_insert,item)
query.addErrback(self.handle_error,item,spider)#处理异常
def handle_error(self,failure,item,spider):
#处理异步插入的异常
print(failure)
def do_insert(self,cursor,item):
#执行具体的插入
#根据不同的的item构建不同的sql语句插入到mysql中
insert_sql,params = item.get_insert_sql()
cursor.execute(insert_sql,params)
###自动com