scrapy基礎知識之 處理Redis里的數據:


數據爬回來了,但是放在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()
需要新建數據庫以及表,字段


免責聲明!

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



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