爬蟲 異步數據寫入框架 (adbapi)


數據庫pymysql的commit()和execute()在提交數據時,都是同步提交至數據庫,由於scrapy框架數據的解析和異步多線程的,所以scrapy的數據解析速度,要遠高於數據的寫入數據庫的速度。如果數據寫入過慢,會造成數據庫寫入的阻塞,影響數據庫寫入的效率。
通過多線程異步的形式對數據進行寫入,可以提高數據的寫入速度。


使用twisted異步IO框架,實現數據的異步寫入。
from twisted.enterprise import adbapi
 
        
# 初始化數據庫連接池(線程池)
# 參數一:mysql的驅動
# 參數二:連接mysql的配置信息
dbpool = adbapi.ConnectionPool('pymysql', **params)
參數1:在異步任務中要執行的函數insert_db;
參數2:給該函數insert_db傳遞的參數
query = self.dbpool.runInteraction(self.insert_db, item)
def insert_db(self, cursor, item):
      insert_sql = "INSERT INTO bole(title, date_time, tags, content, zan_num, keep_num, comment_num, img_src, img_path) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)"
        cursor.execute(insert_sql, (item['title'], item['date_time'], item['tags'], item['content'], item['zan_num'], item['keep_num'], item['comment_num'], item['img_src'], item['img_path']))

       在execute()之后,不需要再進行commit(),連接池內部會進行提交的操作。

 



 


免責聲明!

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



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