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

远端部署

连接服务器

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容