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

  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. oracle-数据库被注入恶意攻击程序的案例恢复

    问题描述: Oracle数据库由于重启之后无法正常启动,tab$被清空(ORA-600 16703故障解析—tab$表被清空),导致数据库启动异常 ORA-600 16703报错 一.检测方法: 如下 ...

  2. centos 6.10 安装mysql 5.7.27

    操作系统Centos 6.10 64位 Mysql 版本 5.7.27 , 从官网下载 该教程是Mysql shell安装脚本,脚本运行结束后需要重置密码,以及必要的授权操作等 该教程对外端口设置为5 ...

  3. 每天进步一点点------CORDIC (一)

    三角函数计算,Cordic 算法入门 三角函数的计算是个复杂的主题,有计算机之前,人们通常通过查找三角函数表来计算任意角度的三角函数的值.这种表格在人们刚刚产生三角函数的概念的时候就已经有了,它们通常 ...

  4. JVM(三、双亲委派机制)

    javadoc的解释: ClassLoader的每一个实例都会有一个与之关联的父ClassLoader,当被要求去寻找一个类或者资源的时候,ClassLoader的实例就会对于类或者是资源的寻找委托给 ...

  5. html2canvas.js 图片不显示

    html2canvas.js 图片不显示 在服务器端打开 就可以, 但是在本地就不显示图片. 查找百度,是因为图片不能跨域. 在给非编程人员使用的时候,建议把所有的图片,转化为base64,就可以直接 ...

  6. C++子类虚函数表指针

    最近看剑指offer,记录一下 #include <iostream> #include <string> #include <cctype> #include&l ...

  7. tp5 rewrite apache 配置

    emmmmm,本来还是nginx服务器,突然换成了apache ubuntu系统,apache2服务器,tp5, 1.首先还是运行phpinfo.php,搜一下“Loaded Modules”这里面是 ...

  8. 一个基础的问题 多个$(function(){})里面的函数 为什么在下一个$(function(){})里没法执行。

    先看下例子 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit ...

  9. velocity的 ${} 、$!{}、 !${}

    ${abc}   //-------过滤变量中的HTML标签 $!{abc}  //-------原样输出表达式,"!"符号表示如果可以取到值则显示值,如果取不到值或值为null, ...

  10. SQLite3介绍

    一.SQLite数据库简介 SQLite 是一个软件库,实现了自给自足的.无服务器的.零配置的.事务性的 SQL 数据库引擎.SQLite 是在世界上最广泛部署的 SQL 数据库引擎. DDL - 数 ...