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

  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 serv\ice 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 ]范围的所有成员

Scrapy 分布式爬取的更多相关文章

  1. 爬虫07 /scrapy图片爬取、中间件、selenium在scrapy中的应用、CrawlSpider、分布式、增量式

    爬虫07 /scrapy图片爬取.中间件.selenium在scrapy中的应用.CrawlSpider.分布式.增量式 目录 爬虫07 /scrapy图片爬取.中间件.selenium在scrapy ...

  2. scrapy-redis实现爬虫分布式爬取分析与实现

    本文链接:http://blog.csdn.net/u012150179/article/details/38091411 一 scrapy-redis实现分布式爬取分析 所谓的scrapy-redi ...

  3. scrapy关键字爬取百度图库(一)

    刚入门学习python的菜鸟,如有错误,还望指教 爬取百度图库需要知道百度图库的加载方式是通过下拉加载的,所以我们需要分析Ajax请求来爬取每一页的数据信息 表述不清直接上图片 图片一是刷新页面后加载 ...

  4. scrapy-redis + Bloom Filter分布式爬取tencent社招信息

    scrapy-redis + Bloom Filter分布式爬取tencent社招信息 什么是scrapy-redis 什么是 Bloom Filter 为什么需要使用scrapy-redis + B ...

  5. scrapy-redis分布式爬取tencent社招信息

    scrapy-redis分布式爬取tencent社招信息 什么是scrapy-redis 目标任务 安装爬虫 创建爬虫 编写 items.py 编写 spiders/tencent.py 编写 pip ...

  6. scrapy分布式抓取基本设置

    scrapy本身并不是一个为分布式爬取而设计的框架,但第三方库scrapy-redis为其扩展了分布式抓取的功能,在分布式爬虫框架中,需要使用某种通信机制协调各个爬虫工作 (1)当前的爬取任务,下载+ ...

  7. 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息

    简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 系统环境:Fedora22(昨天已安装scrapy环境) 爬取的开始URL:ht ...

  8. 使用scrapy框架爬取自己的博文(2)

    之前写了一篇用scrapy框架爬取自己博文的博客,后来发现对于中文的处理一直有问题- - 显示的时候 [u'python\u4e0b\u722c\u67d0\u4e2a\u7f51\u9875\u76 ...

  9. 如何提高scrapy的爬取效率

    提高scrapy的爬取效率 增加并发: 默认scrapy开启的并发线程为32个,可以适当进行增加.在settings配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发设置 ...

随机推荐

  1. Django框架-模型层

    Django框架-模型层 一.单表查询之必知必会13条 1.时间字段中的两个关键性参数 create_time = models.DateField() # 年月日 create_time = mod ...

  2. LPR-贷款市场报价利率

    贷款市场报价利率(Loan Prime Rate)介绍: 贷款市场报价利率(Loan Prime Rate,简称LPR)是商业银行对其最优质客户执行的贷款利率,其他贷款利率可在此基础上加减点生成.贷款 ...

  3. vue 实现todolist,包含添加,删除,统计,清空,隐藏功能

    vue 实现todolist,包含添加,删除,统计,清空,隐藏功能 添加:生成列表结构(v-for+数组).获取用户输入(v-model).通过回车新增数据(v-on+.enter) 删除:点击删除指 ...

  4. Docker - Docker 镜像 简介

    概述 简单介绍一下 docker 镜像的概念 1. 背景 复习 docker 镜像是 docker 最基础, 最重要的概念之一 所以正式使用之前, 最好有所理解和认识 2. 镜像 概述 简单描述 理解 ...

  5. The Preliminary Contest for ICPC Asia Shanghai 2019 B Light bulbs (离散的差分)

    复杂度分析,询问一千次,区间长1e6,O(1e9)超时. 那么我们知道对于差分来说,没必要一个一个求,只需要知道区间长就可以了,所以我们定义结构体差分节点,一个头结点,一个尾节点. 这样tail.lo ...

  6. iframe多层嵌套时,Jquery获取元素

    在项目中,尤其是后台管理项目,会使用到iframe嵌套的网页,说起iframe,真的是个让人头疼的东西,能避开是最好避开.不然要请随身备好氧气瓶哈(因为管理和调试过程中往往会被气缺氧!!!哈哈哈~~~ ...

  7. re模块、正则表达式

    一.正则表达式 1.正则表达式不是Python独有的,它是一门独立的技术,所有的编程语言都可以使用正则表达式,在Python中使用正则表达式就要借助于re模块,或者是支持正则表达式书写的方法. 2.用 ...

  8. ACM进阶之路

    第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码, 因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打 出来. 3.大数(高精度)加减乘除 ...

  9. 《实战Java高并发程序设计》读书笔记五

    第五章 并行模式与算法 1.单例模式 是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统一个类只产生一个实例. 对于频繁创建使用的对象可以省略new 操作花费的时间,可以减少系统开销. 由 ...

  10. 在tomcat上部署项目

    1.部署项目的第一种方法(项目直接放入 webapps 目录中) 2.部署项目的第二种方法(修改 conf/server.xml 文件 ) 3.部署项目的第三种方法(apache-tomcat-7.0 ...