Scrapy用Twisted異步操作Mysql

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,
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章