Redis实现分布式爬虫 Redis配置以及可视化管理界面Redis Dsektop Manager

鳄鱼君

发表文章数:642

热门标签

, , , ,

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python » Redis实现分布式爬虫 Redis配置以及可视化管理界面Redis Dsektop Manager

使用分布式爬虫,可以极大的提高爬虫的效率,能够实现不同服务器爬虫之间的数据存储,这篇文章主要介绍Redis

Redis是一个基于内存的Key-Value数据库,支持的数据类型有string、lists、sets、zsets。这些数据类型都支持push/popadd/remove以及取交集、并集、差集等操作,对这些操作都是原子性的。因此,使用Redis可以很轻松地实现高并发的数据访问。

在分布式中,Redis的队列性特别好用,被用来作为分布式的基石。我们将在多台机器上安装Redis,然后让一台作为服务器,其他机器开启客户端共享队列。

首先,需要在Windows上安装Redis:

  1. 进入Redis for Windows下载页面(http://github.com/MSOpenTech/redis/releases)下载最新版Redis,ZIP文件
  2. 将ZIP文件解压并放在某文件夹中,如D:\redis。然后打开cmd,把目录指向解压的Redis目录。输入redis-server redis.windows.conf
  3. 将Redis以Windows Service的方式启动。虽然上一个步骤启动了Redis,但是只要关闭cmd窗口,Redis就会消失。所以要把Redis设置成Windows下的服务。关闭刚刚的cmd窗口,再打开一个新的cmd窗口,进入Redis目录,输入:
    redis-server --service-install redis.windows-service.conf --loglevel verbose

    输入命令之后没有报错,表示成功安装。打开Windows中的“服务”窗口,可以看到Redis服务。

  4. 启动Redis服务。在刚刚的cmd窗口中键入:
    redis-server --service-start

    表示启动服务。如果出现Redis service successfully started的提示,就表示服务成功启动。

  5. 停止和卸载Redis服务:
    停止服务 redis-server --service-stop
    卸载服务 redis-server --service-uninstall

这里在Windows上下载的ZIP压缩包,会存在两个配置文件redis.windows-service.conf和redis.windows.conf。如果你在Windows上将redis安装为Windows服务,配置的时候,使用的就是redis.windows-service.conf文件,如果直接在命令行输入redis-server redis.windows.conf启动,呢么配置文件就是redis.windows.conf,在下面修改的时候需要注意。redis启动的方式就是输入命令,不要在Redis目录直接打开redis-cli.exe或者redis-server.exe

修改Redis配置

在默认情况下,访问Redis服务器是不需要密码的,为了增加安全性,我们需要设置Redis服务器的访问密码。这里设置访问密码为redisredis。直接打开Redis文件夹中的redis.windows-service.conf,在其中取消注释requirepass,将该变量的值设置为redisredis,这个就是密码:

Redis实现分布式爬虫 Redis配置以及可视化管理界面Redis Dsektop Manager

在默认情况下,Redis服务器不允许远程访问,只允许本机访问,所以需要设置打开远程访问的功能。仍然是在Redis文件夹的redis.windows-service.conf注释bind变量
Redis实现分布式爬虫 Redis配置以及可视化管理界面Redis Dsektop Manager

关闭保护模式,将protexted-mode yes修改为protexted-mode no

Redis实现分布式爬虫 Redis配置以及可视化管理界面Redis Dsektop Manager

修改完成后,可以尝试使用本机的IP地址加上密码访问Redis服务器。本机IP地址可以通过cmd中的ipconfig命令获取。在cmd中键入:redis-cli -a redisredis -h你的ip地址 -p 6379。如果能够正常访问Redis服务器,就代表Redis远程访问成功。如果一直卡顿,可能本机IP地址错误,或者本机没有启动redis服务。

除了本机之外,还需要在其他服务器上安装配置好Redis。

如果想可视化地管理Redis数据库,可以进入网站http://redisdesktop.com/download下载Redis Desktop Manager。安装和配置过程非常简单,直接下载exe程序,可以像普通软件一样安装,这个东西需要money,所以鳄鱼君Ba这里不再进行安装说明,感兴趣的自己尝试!

Redis分布式爬虫

分布式爬虫可以简单分为两中类型的任务,一类是获取待爬URL,并加入队列;另一类是读取待爬队列,获取URL。首先需要在python上安装reids库,使用pip命令:pip install redis即可!

创建一个函数,用于获取所有的URL链接地址,并且将这些URL加入Redis数据库的队列,代码参考:

import redis
def push_redis_url():
    client=redis.Redis(host='127.0.0.1',port=6379,password='redisredis')
    print(client.keys('*'))
    link_list=[]
    with open('./alexa.txt', 'r') as f: # 读取存放URL的文件
        file_list = f.readlines()  # 逐行读取
        for i in file_list:
            link = i.split(',')[0]
            link_list.append(link)
    for url in link_list: # 循环添加到Redis中
        print('加入的URL地址:',url)
        client.lpush('urls',url)
        print('Redis数据库现有的URL数量:',client.llen('urls'))

接下来需要从Redis服务中读取队列中的URL地址,并且获取响应,代码参考:

def get_url():
    r = redis.Redis(host='127.0.0.1',port=6379,password='redisredis')
    while True:
        try:
            url = r.lpop('urls')
            response = requests.get(url, timeout=20)
            print('已获取到URL', url,response.status_code)
        except Exception as e:
            print(e)

对于不同的服务器,有着不同的功能。master.py文件负责向Redis存储URL,该文件运行push_redis_url函数;另一个slave.py文件可以开启多个服务器,运行get_url函数。这里可以分别存放到各自对应的文件,然后分别运行起来。

master.py添加队列

import redis
import requests
headers={
    "User-Agent": "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0"
}
def push_redis_url():
    # 同上
def get_url():
    # 同上

if __name__ == '__main__':
    machine='master'
    print('开始分布式爬虫')
    if machine=='master':
        push_redis_url()
    else:
        get_url()

slave.py读取对队列

import redis
import requests
headers={
    "User-Agent": "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0"
}
def push_redis_url():
   # 同上

def get_url():
    # 同上

if __name__ == '__main__':
    machine='slave'
    print('开始分布式爬虫')
    if machine=='master':
        push_redis_url()
    else:
        get_url()
        

在本地计算机上运行这两个文件,master.py负责添加队列,slave.py负责读取队列。本地可以当作redis服务端,添加队列,其它的服务器用作客户端,读取队列。

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Redis实现分布式爬虫 Redis配置以及可视化管理界面Redis Dsektop Manager》 发布于2020-07-06

分享到:
赞(0) 赏杯咖啡

评论 2

7 + 3 =
  1. #1

    你的教程Windows的较多,其实服务器很多都用Linux。

    Teacher Du4个月前 (07-06)回复
    • 嗯嗯,我正在学Linux

      管理员鳄鱼君Ba4个月前 (07-07)

文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册