redis與python交互,本地部署和遠(yuǎn)端部署

1.存儲在redis數(shù)據(jù)庫中,每個item都要加一個tableName,這樣取出來處理數(shù)據(jù)時(shí),可以根據(jù)tableName進(jìn)行判斷

import redis
import pymongo
import json

def get_data_to_mongodb():
    #redis數(shù)據(jù)庫連接
    redis_cli = redis.StrictRedis(host='127.0.0.1',port=6379,db=0)#如果是遠(yuǎn)端的改成遠(yuǎn)端的地址

    #mongodb數(shù)據(jù)庫連接
    mongo_cli = pymongo.MongoClient(host='127.0.0.1',port=27017)
    #獲取要操作的數(shù)據(jù)庫和集合
    db = mongo_cli['xcfdb']
    col = db['xcfcol']

    while True:
        # blpop參數(shù):keys:key名, timeout=0設(shè)置阻塞時(shí)間
        source,data = redis_cli.blpop('xcf:items',timeout=3)
        #data是bytes類型的數(shù)據(jù)
        print(source,data)
        data_str = data.decode('utf-8')#轉(zhuǎn)成字典里面字符串
        document = json.loads(data_str)#轉(zhuǎn)換成json數(shù)據(jù)類型

        try:
            result = col.insert(document)
            print('存儲成功',result)
        except Exception as err:
            print(err)

if __name__ == '__main__':
    get_data_to_mongodb()

如果代碼報(bào)錯回調(diào)方法錯誤,打開爬蟲文件,需要修改yield,不添加回調(diào)函數(shù),直接把需要回調(diào)的函數(shù)改成parse

    def start_requests(self):
        """
        重寫這個方法的目的可以根據(jù)自己的需求發(fā)起請求
        :return:
        """
        for url in self.start_urls:
            # yield scrapy.Request(url,callback=self.parse_category,dont_filter=True)
            yield scrapy.Request(url,dont_filter=True)

    # def parse_category(self,response):
    def parse(self, response):
        """

2.將數(shù)據(jù)導(dǎo)出存入 MySQL 首先啟動mysql 創(chuàng)建數(shù)據(jù)庫和表

# -*- coding: utf-8 -*-

import json
import redis
import pymysql

def main():
    # 指定redis數(shù)據(jù)庫信息
    rediscli = redis.StrictRedis(host='localhost', port = 6379, db = 0)
    # 指定mysql數(shù)據(jù)庫
    mysqlcli = pymysql.connect(host='localhost', user='用戶', passwd='密碼', db = '數(shù)據(jù)庫', port=3306, use_unicode=True)
    # 使用cursor()方法獲取操作游標(biāo)
    cur = mysqlcli.cursor()

    while True:

        # FIFO模式為 blpop,LIFO模式為 brpop,獲取鍵值
        source, data = rediscli.blpop("redis中對應(yīng)的文件夾:items")
        item = json.loads(data.decode('utf-8'))

        try:
            # 使用execute方法執(zhí)行SQL INSERT語句
            cur.execute(“插入語句",['數(shù)據(jù)'])

            # 提交sql事務(wù)
            mysqlcli.commit()

            print("inserted successed")

        except Exception as err:
            #插入失敗
            print("Mysql Error",err)
            mysqlcli.rollback()

if __name__ == '__main__':
    main()

Scrapy爬蟲的部署

本地部署

運(yùn)行scrapy爬蟲的服務(wù)程序,支持以http命令方式發(fā)布、刪除、啟動、停止爬蟲程序

pip3 install scrapyd()

將代碼打包,上傳到遠(yuǎn)程主機(jī)上

pip3 install scrapyd-client(打包)

開啟scrapyd服務(wù)

首先需要修改scrapy.cfg項(xiàng)目配置文件

本地部署url寫成如下

[deploy]
url = http://localhost:6800/
project = xiachufang

添加項(xiàng)目
在項(xiàng)目下包含scrapy.cfg的下面運(yùn)行

scrapyd-deploy -p xiachufang --version 1.0(版本號)

需要安裝curl

sudo apt-get install curl

開啟redis服務(wù)

遠(yuǎn)端部署

連接服務(wù)器

ssh ubuntu@118.24.255.176

sudo apt-get install python3-pip

pip3 install scrapyd

如果安裝失敗添加如下依賴,再anzscrapyd:

sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev

pip3 install scrapy

pip3 install scrapy_redis

pip3 install pymysql

pip3 install pymongo

啟動服務(wù)scrapyd

修改
127.0.0.1:6800只能本地訪問,要修改配置文件,允許外網(wǎng)訪問

find -name default_scrapyd.conf
會返回一個路徑

sudo vim 上面的路徑,把bind_address改成0.0.0.0

這時(shí)外網(wǎng)還是不能訪問

進(jìn)入騰訊云的安全組->新建->點(diǎn)進(jìn)去剛建的安全組->添加規(guī)則:來源0.0.0.0/0,協(xié)議端口TCP:6800完成;->實(shí)例->更多->配置安全組->選擇剛才新建的安全組(打鉤)->確認(rèn)

現(xiàn)在重新啟動服務(wù)scrapyd 就可以外網(wǎng)訪問了
測試一下,看是否能打開

http://118.24.255.176:6800/

部署代碼
打開項(xiàng)目,如果之前有打包過的話,最好刪掉之前打包的文件build,project.egg-info,setup文檔

setting.py修改指定要存儲的redis數(shù)據(jù)庫的主機(jī)ip
REDIS_HOST = '118.24.255.176'

scrapy.cfg改url,改成服務(wù)器的地址

[deploy]
url = http://118.24.255.176:6800/
project = xiachufang

在scrapy.cfg同級目錄下開始部署>scrapy-deploy -p xiachufang

然后在http://118.24.255.176:6800/看看有沒有部署上

啟動服務(wù)scrapyd

添加項(xiàng)目
在項(xiàng)目下包含scrapy.cfg的下面運(yùn)行

scrapyd-deploy -p xiachufang --version 1.0(版本號)

沒有curl需要安裝curl

sudo apt-get install curl

開啟redis服務(wù)

如果涉及到數(shù)據(jù)庫,則需要在遠(yuǎn)程服務(wù)器中安裝mysql

sudo apt-get install mysql-server mysql-client
不要忘記設(shè)置mysql密碼

修改配置文件允許外網(wǎng)訪問
找到mysql配置文件并做如下修改:允許遠(yuǎn)程連接

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf


bind-address= 127.0.0.1
注釋掉或則修改為
bind-address= 0.0.0.0

讓外網(wǎng)可以訪問mysql數(shù)據(jù)庫需要修改權(quán)限
授權(quán)root賬戶允許遠(yuǎn)程訪問:

grant all privileges on . to root@'%' identified by '1234' with grant option;

刷新權(quán)限

flush privileges;

注意:如果還是不能遠(yuǎn)程訪問就重啟mysql服務(wù)

sudo service mysql stop
sudo service mysql start

在遠(yuǎn)程服務(wù)器中安裝mongdb

sudo apt-get install mongodb

啟動:

sudo service mongodb start 連接客戶端報(bào)錯參考如下網(wǎng)址: (輸入:sudo systemctl enable mongodb) mongo

修改配置文件的路徑

sudo vim /etc/mongodb.conf
bind_ip = 0.0.0.0

sudo service mongodb stop

sudo service mongodb start

redis數(shù)據(jù)庫的安裝
在遠(yuǎn)端服務(wù)器上安裝redis數(shù)據(jù)庫

  • step1:

cd ~?。ㄟM(jìn)入指定的目錄)

  • step2:

下載redis數(shù)據(jù)庫壓縮包: wget http://download.redis.io/releases/redis-4.0.10.tar.gz

  • step3:

解壓下載的文件:

tar -zxvf redis-4.0.10.tar.gz

  • step4:

復(fù)制,放到/usr/local目錄下面( 先創(chuàng)建文件夾/usr/local/redis/ 沒有的化先創(chuàng)建redis文件夾)

mv ./redis-4.0.11/* /usr/local/redis/

  • step5:進(jìn)入redis目錄

cd /usr/local/redis/redis-4.0.11

  • step6:

sudo make
sudo make test
如果有問題 sudo apt install tcl
sudo make install

  • step7:

sudo cp /usr/local/redis/redis-4.0.10/
redis.conf /etc/redis/

  • step8:

修改配置文件,允許外網(wǎng)訪問 sudo vim redis.conf
將配置文件中的bind修改為:
bind=0.0.0.0
protected-mode no
daemonize yes

  • step9:

啟動redis服務(wù): sudo redis-server redis.cnf

  • step10:重新開啟一個終端,鏈接客戶端

redis-cli -h ip -p 6379

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容