redis与python交互,本地部署和远端部署

1.存储在redis数据库中,每个item都要加一个tableName,这样取出来处理数据时,可以根据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()

将代码打包,上传到远程主机上

pip3 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 连接客户端报错参考如下网址: (输入: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数据库压缩包: wget http://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/

  • step5:进入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

  • step10:重新开启一个终端,链接客户端

redis-cli -h ip -p 6379

你可能感兴趣的:(redis与python交互,本地部署和远端部署)