數據爬回來了,但是放在Redis里沒有處理。之前我們配置文件里面沒有定制自己的ITEM_PIPELINES,而是使用了RedisPipeline,所以現在這些數據都被保存在redis的xx:items鍵中,所以我們需要另外做處理。
在目錄下可以看到一個process_items.py文件,這個文件就是scrapy-redis的example提供的從redis讀取item進行處理的模版。
假設我們要把xx:items中保存的數據讀出來寫進MongoDB或者MySQL,那么我們可以自己寫一個process_xx_profile.py文件,然后保持后台運行就可以不停地將爬回來的數據入庫了。
存入MongoDB
在目錄下新建process_item_mongo.py文件
#coding=utf-8
import pymongo
import redis
import json
def process_item():
Redis_conn=redis.StrictRedis(host='localhost',port=6379,db=0)
Mongo_conn=pymongo.MongoClient(host='localhost',port=27017)
db_name=Mongo_conn["dbname"]
table_name=db_name["tablename"]
while True:
source, data = Redis_conn.blpop(["xx:items"])
data = json.loads(data.decode("utf-8"))
table_name.insert(data)
if __name__=="__main__":
process_item()
存入 MySQL
在目錄下新建process_item_mysql.py文件
#coding=utf-8
import pymysql
import redis
import json
def process_item():
Redis_conn=redis.StrictRedis(host='127.0.0.1',port=6379,db=0)
MySql_conn=pymysql.connect(host='127.0.0.1',user='',passwd='',port=3306,db='dbname')
while True:
source,data=Redis_conn.blpop("xx:items")
data=json.loads(data.decode("utf-8"))
cur=MySql_conn.cursor()
sql=("insert into xx(字段)"
"VALUES (%s)")
lis = (data['xx'])
cur.execute(sql,lis)
MySql_conn.commit()
cur.close()
MySql_conn.close()
if __name__=="__main__":
process_item()
需要新建數據庫以及表,字段
