redisとpythonのインタラクション、ローカル導入、リモート導入

7907 ワード

1.redisデータベースに格納し、itemごとにtableNameを1つ追加することで、処理データを取り出す際にtableNameで判断できる
import redis
import pymongo
import json

def get_data_to_mongodb():
    #redis     
    redis_cli = redis.StrictRedis(host='127.0.0.1',port=6379,db=0)#             

    #mongodb     
    mongo_cli = pymongo.MongoClient(host='127.0.0.1',port=27017)
    #            
    db = mongo_cli['xcfdb']
    col = db['xcfcol']

    while True:
        # blpop  :keys:key , timeout=0      
        source,data = redis_cli.blpop('xcf:items',timeout=3)
        #data bytes     
        print(source,data)
        data_str = data.decode('utf-8')#         
        document = json.loads(data_str)#   json    

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

if __name__ == '__main__':
    get_data_to_mongodb()

コードエラーコールバックメソッドが間違っている場合は、爬虫類ファイルを開くにはyieldを修正し、コールバック関数を追加せずに、コールバックが必要な関数をparseに直接変更する必要があります
    def start_requests(self):
        """
                              
        :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.MySQLにデータをエクスポートするまずmysqlを起動してデータベースとテーブルを作成する
# -*- coding: utf-8 -*-

import json
import redis
import pymysql

def main():
    #   redis     
    rediscli = redis.StrictRedis(host='localhost', port = 6379, db = 0)
    #   mysql   
    mysqlcli = pymysql.connect(host='localhost', user='  ', passwd='  ', db = '   ', port=3306, use_unicode=True)
    #   cursor()        
    cur = mysqlcli.cursor()

    while True:

        # FIFO    blpop,LIFO    brpop,    
        source, data = rediscli.blpop("redis       :items")
        item = json.loads(data.decode('utf-8'))

        try:
            #   execute    SQL INSERT  
            cur.execute(“    ",['  '])

            #   sql  
            mysqlcli.commit()

            print("inserted successed")

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

if __name__ == '__main__':
    main()


Scrapy爬虫類の配置
ローカル配備
scrapy爬虫類のサービスプログラムを実行し、httpコマンドで爬虫類プログラムを発行、削除、起動、停止することをサポートする
pip3 install scrapyd()
コードをパッケージ化してリモートホストにアップロード
pip 3 install scrapyd-client(パッケージ)
scrapydサービスを開始
まずscrapyを変更する必要があります.cfgプロジェクトプロファイル
ローカルデプロイメントurlは次のように書かれています.
[deploy]
url = http://localhost:6800/
project = xiachufang


プロジェクトの下にscrapyを含むアイテムを追加します.cfgの次の運転
scrapyd-deploy-p xiachufang--version 1.0(バージョン番号)
curlのインストールが必要です
sudo apt-get install curl
redisサービスを開始
  • 爬虫curlを実行http://localhost:6800/schedule.json-d project=プロジェクト名-d spider=爬虫類名
  • 爬虫類curlを閉じるhttp://localhost:6800/cancel.json -d project=myproject -d job=6487ec79947edab326d6db28a2d86511e8247444
  • 配置されたプロジェクトリストcurlを取得http://localhost:6800/listprojects.json
  • プロジェクトバージョン情報(リスト)curlを取得http://localhost:6800/listversions.json?project=myproject
  • 現在のプロジェクトの下にあるプロジェクトファイルcurlを取得http://localhost:6800/listspiders.json?project=myproject
  • 爬虫類の運転状態curlを取得http://localhost:6800/listjobs.json?project=myproject | python -m json.tool
  • バージョンに従ってプロジェクトcurlを削除http://localhost:6800/delversion.json -d project=myproject -d version=r99
  • プロジェクトに基づいてcurlを削除http://localhost:6800/delproject.json -d project=myproject

  • リモート配備
    接続サーバ
    ssh [email protected]
    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
    サービスscrapydの起動
    修正127.0.0.1:6800はローカルのみアクセスできます.プロファイルを変更するには、外部ネットワークへのアクセスを許可します.
    find -name default_scrapyd.confはパスを返します
    sudo vim上のパス、bind_addressを0.0.0.0に変更
    この場合、外部ネットワークはまだアクセスできません.
    テンセントクラウドのセキュリティグループに入る->新規->建設したばかりのセキュリティグループに入る->ルールを追加する:ソース0.0.0.0/0、プロトコルポートTCP:6800完成;->インスタンス->詳細->セキュリティグループの構成->新規作成したセキュリティグループの選択(フック)->確認
    サービスscrapydを再起動すると、外部ネットワークにアクセスしてテストし、開くことができるかどうかを確認できます.
    http://118.24.255.176:6800/
    配備コードはプロジェクトを開き、前にパッケージしたことがあれば、前にパッケージしたファイルbuild,projectを削除したほうがいい.egg-info,setupドキュメント
    setting.py格納するredisデータベースを指定したホストip REDIS_を変更するHOST = '118.24.255.176'
    scrapy.cfg urlを変更し、サーバのアドレスに変更
    [deploy]
    url = http://118.24.255.176:6800/
    project = xiachufang
    

    scrapyでcfg兄弟ディレクトリの下で展開>scrapy-deploy-p xiachufang
    そしてhttp://118.24.255.176:6800/配置があるかどうか見てみましょう
    サービスscrapydの起動
    プロジェクトの下にscrapyを含むアイテムを追加します.cfgの次の運転
    scrapyd-deploy-p xiachufang--version 1.0(バージョン番号)
    curlがない場合はcurlをインストールする必要があります
    sudo apt-get install curl
    redisサービスを開始
  • 爬虫curlを実行http://localhost:6800/schedule.json-d project=プロジェクト名-d spider=爬虫類名
  • 爬虫類curlを閉じるhttp://localhost:6800/cancel.json -d project=myproject -d job=6487ec79947edab326d6db28a2d86511e8247444
  • 配置されたプロジェクトリストcurlを取得http://localhost:6800/listprojects.json
  • プロジェクトバージョン情報(リスト)curlを取得http://localhost:6800/listversions.json?project=myproject
  • 現在のプロジェクトの下にあるプロジェクトファイルcurlを取得http://localhost:6800/listspiders.json?project=myproject
  • 爬虫類の運転状態curlを取得http://localhost:6800/listjobs.json?project=myproject | python -m json.tool
  • バージョンに従ってプロジェクトcurlを削除http://localhost:6800/delversion.json -d project=myproject -d version=r99
  • プロジェクトに基づいてcurlを削除http://localhost:6800/delproject.json -d project=myproject

  • データベースに関連する場合は、mysqlをリモートサーバにインストールする必要があります.
    sudo apt-get install mysql-server mysql-client mysqlパスワードの設定を忘れないでください
    プロファイルを変更すると、外部ネットワークアクセスでmysqlプロファイルが見つかり、リモート接続が許可されます.
    sudo vi/etc/mysql/mysql.conf.d/mysqld.cnf
    bind-address=127.0.0.1コメントを削除するか、bind-address=0.0.0.0に変更します.
    外部ネットワークがmysqlデータベースにアクセスできるようにするには、権限認証rootアカウントを変更してリモートアクセスを許可する必要があります.
    grant all privileges on . to root@'%' identified by '1234' with grant option;
    権限のリフレッシュ
    flush privileges;
    注意:リモートアクセスができない場合はmysqlサービスを再起動します.
    sudo service mysql stop sudo service mysql start
    リモートサーバにmongdbをインストールする
    sudo apt-get install mongodb
    開始:
    sudo service mongodb start接続クライアントエラーは以下のURLを参照してください:(入力: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データベースのインストールリモートサーバにredisデータベースをインストールする
  • step1:

  • cd~(指定されたディレクトリに入る)
  • step2:

  • redisデータベース圧縮パッケージのダウンロード:wgethttp://download.redis.io/releases/redis-4.0.10.tar.gz
  • step3:

  • ダウンロードしたファイルを解凍します.
    tar -zxvf redis-4.0.10.tar.gz
  • step4:

  • コピーし、/usr/localディレクトリの下に置きます(フォルダ/usr/local/redis/なしの化先にredisフォルダを作成します)
    mv ./redis-4.0.11/*/usr/local/redis/
  • step 5: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:

  • プロファイルを変更し、sudo vim redisに外部ネットワークがアクセスできるようにします.confプロファイルのbindをbind=0.0.0.0 protected-mode no daemonize yesに変更
  • step9:

  • redisサービスの開始:sudo redis-server redis.cnf
  • step 10:端末を再開し、クライアント
  • にリンクする
    redis-cli -h ip -p 6379