• Scrapy 分布式爬取


      由于受到计算机能力和网络带宽的限制,单台计算机运行的爬虫咋爬取数据量较大时,需要耗费很长时间。分布式爬取的思想是“人多力量大”,在网络中的多台计算机同时运行程序,公童完成一个大型爬取任务,

      Scrapy 本身并不是一个为分布式爬取而设计的框架,但第三方库 scrapy-redis 为基扩展了分布式爬取的功能,两者结合便是一个分布式爬虫框架。在分布式怕花丛中。需要使用某种通信机制协调各个爬虫的工作,让每一份爬虫明确自己的任务,其中包括:

      (1)当前的爬去任务,即下载 + 提取数据(分配任务)

      (2)当前爬去任务是否已经被其他爬虫执行过(任务去重)

      (3)如何存储爬去到的数据(数据存储)

    scrapy-redis 利用 Redis 数据库作为多个爬虫数据共享实现以上功能,

    1、redis 的使用

      首先来学习一下 redis 数据库的使用, Redis 是一个速度非常快的费关系型数据库,使用内存为主存储,内存中的数据也可以被持久化到硬盘。Redis 以键值形式(key-value)存储数据,其中的值以分为一下 5 中类型:

      (1) 字符串(string)

      (2)哈希 (hash)

      (3)列表(list)

      (4)集合(set)

      (5)有序集合(zset)

      

    2、安装 redis

      接下来安装 Redis, 在 Ubuntu 下可以 使用 apt-get 安装:

      

    sudo apt-get installredis-server

      Redis 数据库进程是一个网络服务器,可以使用一下命令开始、重启、停止 Redis:

    sudo service redis-server start  # 开启Redis
    sudo service redis-server restart   # 重启 Redis
    sudo service redis-server stop   # 停止 Redis

    默认情况下,Redis 会在 127.0.0.1:6379 上开启服务,可以是用 netstat 命令进行查询:

    netsat -ntl

    3、Redis 基本命令

      由于篇幅有限,这里仅介绍一些 Redis 基本使用命令,按照值的 5 种类型依次讲解

      (1)字符串

        Redis 的字符串(String)可以存储字符串、整数、浮点数(数字也是字符串)。String命令描述如表:

    String 命令         设置字符串key的值    
    SET key value 设置字符串 key 的值
    GRT key 获取字符串 key 的值
    DEL key 删除 key

      (2) 列表

        Redis 的列表(List)可以有序的存储多个字符串。List 命令以及描述如图:

    List 命令                  描             述
    LPUSH key value1 [value2 ... ]           在列表 key 左端插入一个或多值         
    RPUSH key value1 [value2 ... ] 在列表 key 右端插入一个或多个值

    LPOP key 

    从列表左侧弹出一个值
    Rpop key  从列表右侧弹出一个值
    LINDEX key index 获取列表 key 中 index 位置的值

    LRANGE key start end

    获取列表中 key 中位置【start, end】范围的值                                                                      

    LIEN key 获取列表中 key 的长度

      (3)哈希

        Redis 的哈希(Hash) 可以存储多个键值对,其中的键和值都是字符串,Hash 命令及描述:

    Hash 命令            描   述
    Hsah key field   value  将哈希 key 的fisld 字段赋值为 value

    HDEL key field [field...]            

    删除哈希 key 的一个或多个字段
    HGET key field  获取哈希 key 的 field 字段的值
    HGETALL key  获取哈希 key 的所有字段值

      (4)集合

        Redis 集合(Set)可以存储多个唯一的字符串。Set命令及描述如图:

    Set 命令           描     述    
    SADD key member1 [member2 ...]      向集合 key 中添加一个或多个成员    
    SREM key member1 [member2 ...] 删除集合 key 中所有成员

    SMEMBERS key

    获取集合 key 中所有成员

    SCRD key 获取集合 key 中成员数量
    SISMEMBER key member  判断 member是否是集合 key 的成员 

      (5)有序集合

        Redis 中有序集合(ZSet)与集合(Set)类似,可以存储多个唯一的字符串,但在有序集合中,每个成员都有一个分数,所有成员按给定分数在集合中有序排列。

    ZSet 命令                

     描    述             
    ZADD key score1 member1 [score2 member2 ... ] 向有序集合 key 中添加一个或多个成员           
    ZREM member [member2... ] 删除有序集合 key 中一个或多个成员
    ZRANGE key start stop 获取有序集合 key 中位置在 [start, stop] 范围的所有成员    
    ZRANGEBYSCORE key min max

    获取有序集合 key 中分值在[start, stop ]范围的所有成员 

  • 相关阅读:
    对我最重要的三个老师
    究竟 javascript 错误处理有哪些类型?
    前端小白凭什么杀进 BAT?
    金九银十,换工作热潮来临!
    适用于Java开发人员的SOLID设计原则简介
    在5分钟内将Spring Boot作为Windows服务启动
    Redis中的Java分布式缓存
    Arrays工具类详解
    SpringBoot整合redis
    java 数组用法详解
  • 原文地址:https://www.cnblogs.com/jcjc/p/10930190.html
Copyright © 2020-2023  润新知