美文网首页
redis与python交互,本地部署和远端部署

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

作者: 咻咻咻滴赵大妞 | 来源:发表于2019-01-08 23:24 被阅读0次

    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服务

    远端部署

    连接服务器

    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

    启动服务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 连接客户端报错参考如下网址: (输入: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交互,本地部署和远端部署

          本文链接:https://www.haomeiwen.com/subject/sdmirqtx.html