1首先在setting中配置好數據庫的信息,便於修改管理
MYSQL_HOST='192.168.0.2'#主機
MYSQL_DBNAME='dbname'#數據庫名稱
MYSQL_USER='root'#用戶名
MYSQL_PASSWORD='jian'#密碼
在pipelines.py中
# Twisted只是提供一個異步容器,本身沒提供數據庫鏈接
class MysqlTwistedPipeline(object):
def __init__(self,dbpool):
self.dbpool = dbpool
#從配置中獲取信息
@classmethod
def from_settings(cls, settings):
dbparms = dict(
host=settings["MYSQL_HOST"],
db=settings['MYSQL_DBNAME'],
user=settings['MYSQL_USER'],
passwd=settings['MYSQL_PASSWORD'],
charset='utf8',
cursorclass=MySQLdb.cursors.DictCursor,
use_unicode=True
)
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.addErrorback(self.handle_error)
#錯誤處理函數
def handle_error(self,falure):
print(falure)
def do_insert(self,cursor,item):
#執行具體的插入
insert_sql = """
insert into jobbole_article(title,create_date,url,url_object_id,front_image_url
,comment_nums,fav_nums,praise_nums,content)
VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s)
"""
cursor.execute(insert_sql, (item['title'], item['create_date'], item['url'], item['url_object_id']
, item['front_image_url'], item['comment_nums']
, item['fav_nums'], item['praise_nums'], item["content"]))
最後一定要在setting中配置
#注,這個方法默認是被註釋掉的
ITEM_PIPELINES = {
'AticleSpider.pipelines.MysqlTwistedPipeline': 1,
}