共計 1857 個字符,預計需要花費 5 分鐘才能閱讀完成。
scrapy 數據存儲在 mysql 數據庫的方式是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
這篇文章主要介紹了 scrapy 數據存儲在 mysql 數據庫的兩種方式 (同步和異步),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著丸趣 TV 小編來一起學習學習吧。
方法一:同步操作
1.pipelines.py 文件 (處理數據的 python 文件)
import pymysqlclass LvyouPipeline(object):def __init__(self):# connection databaseself.connect = pymysql.connect(host= XXX , user= root , passwd= XXX , db= scrapy_test) # 后面三個依次是數據庫連接名、數據庫密碼、數據庫名稱# get cursorself.cursor = self.connect.cursor()print( 連接數據庫成功)def process_item(self, item, spider):# sql 語句 insert_sql = insert into lvyou(name1, address, grade, score, price) VALUES (%s,%s,%s,%s,%s) # 執行插入數據到數據庫操作 self.cursor.execute(insert_sql, (item[ Name], item[Address], item[Grade], item[Score],item[Price]))# 提交,不進行提交無法保存到數據庫 self.connect.commit()def close_spider(self, spider):# 關閉游標和連接 self.cursor.close()self.connect.close()
2. 配置文件中
方式二 異步儲存
pipelines.py 文件:
通過 twisted 實現數據庫異步插入,twisted 模塊提供了 twisted.enterprise.adbapi
1. 導入 adbapi。
2. 生成數據庫連接池。
3. 執行數據數據庫插入操作。
4. 打印錯誤信息,并排錯。
import pymysqlfrom twisted.enterprise import adbapi# 異步更新操作 class LvyouPipeline(object):def __init__(self, dbpool):self.dbpool = dbpool@classmethoddef from_settings(cls, settings): # 函數名固定,會被 scrapy 調用,直接可用 settings 的值 數據庫建立連接:param settings: 配置參數:return: 實例化參數 adbparams = dict(host=settings[ MYSQL_HOST],db=settings[MYSQL_DBNAME],user=settings[MYSQL_USER],password=settings[MYSQL_PASSWORD],cursor >
注意:
1、python 3.x 不再支持 MySQLdb,它在 py3 的替代品是:import pymysql。
2、報錯 pymysql.err.ProgrammingError: (1064, ……
原因:當 item[quotes] 里面含有引號時,可能會報上述錯誤。
解決辦法:使用 pymysql.escape_string() 方法。
例如:
sql = INSERT INTO video_info(video_id, title) VALUES(%s , %s) %(video_info[ id],pymysql.escape_string(video_info[ title]))
3、存在中文的時候,連接需要添加 charset= utf8,否則中文顯示亂碼。
4、每執行一次爬蟲,就會將數據追加到數據庫中,如果多次的測試爬蟲,就會導致相同的數據不斷累積,怎么實現增量爬取?
scrapy-deltafetch
scrapy-crawl-once(與 1 不同的是存儲的數據庫不同)
scrapy-redis
scrapy-redis-bloomfilter(3 的增強版,存儲更多的 url, 查詢更快)
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業資訊頻道,感謝您對丸趣 TV 的支持。