# 數據的持久化操作redis---->MongoDB
import redis
from pymongo import MongoClient
import json
# 爬蟲實現簡單分布式:多個url放到列表里,往里不停放URL,程序循環取值,
# 可以把url放到redis中,多台機器從redis中取值,爬取數據,實現簡單分布式
# 實例化redis客戶端
redis_client = redis.Redis(host='127.0.0.1',port=6379)
# 實例化MongoDB客戶端
mongo_client = MongoClient(host='127.0.0.1',port=27017)
# 指定鏈接的MongDB數據庫、集合
db = mongo_client['HN']
col = db['HN']
# 使用循環把redis中數據全部寫入到MongoDB中
while True:
# 從redis中取出數據
#blpop中出參數就是redis中的key-value的名為value的列表的名稱,
# 系統默認生成的與爬蟲文件名類似的名稱,形如=>(爬蟲名:items)
key,data = redis_client.blpop(['hn_spider:items'])
print('key', key)
print('data',data)
#json.loads()函數是將json格式數據轉換為字典
# 把數據寫入到MongoDB中
col.insert_one(json.loads(data.decode()))
# 關閉數據庫
mongo_client.close()