redisとpythonのインタラクション、ローカル導入、リモート導入
7907 ワード
1.redisデータベースに格納し、itemごとにtableNameを1つ追加することで、処理データを取り出す際にtableNameで判断できる
コードエラーコールバックメソッドが間違っている場合は、爬虫類ファイルを開くにはyieldを修正し、コールバック関数を追加せずに、コールバックが必要な関数をparseに直接変更する必要があります
2.MySQLにデータをエクスポートするまずmysqlを起動してデータベースとテーブルを作成する
Scrapy爬虫類の配置
ローカル配備
scrapy爬虫類のサービスプログラムを実行し、httpコマンドで爬虫類プログラムを発行、削除、起動、停止することをサポートする
pip3 install scrapyd()
コードをパッケージ化してリモートホストにアップロード
pip 3 install scrapyd-client(パッケージ)
scrapydサービスを開始
まずscrapyを変更する必要があります.cfgプロジェクトプロファイル
ローカルデプロイメントurlは次のように書かれています.
プロジェクトの下に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を変更し、サーバのアドレスに変更
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
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サービスを開始
リモート配備
接続サーバ
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サービスを開始
データベースに関連する場合は、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データベースをインストールする
cd~(指定されたディレクトリに入る)
redisデータベース圧縮パッケージのダウンロード:wgethttp://download.redis.io/releases/redis-4.0.10.tar.gz
ダウンロードしたファイルを解凍します.
tar -zxvf redis-4.0.10.tar.gz
コピーし、/usr/localディレクトリの下に置きます(フォルダ/usr/local/redis/なしの化先にredisフォルダを作成します)
mv ./redis-4.0.11/*/usr/local/redis/
cd/usr/local/redis/redis-4.0.11
sudo make sudo make test問題がある場合sudo apt install tcl sudo make install
sudo cp/usr/local/redis/redis-4.0.10/redis.conf/etc/redis/
プロファイルを変更し、sudo vim redisに外部ネットワークがアクセスできるようにします.confプロファイルのbindをbind=0.0.0.0 protected-mode no daemonize yesに変更
redisサービスの開始:sudo redis-server redis.cnf
redis-cli -h ip -p 6379