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 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 分布式爬取的更多相关文章
- 爬虫07 /scrapy图片爬取、中间件、selenium在scrapy中的应用、CrawlSpider、分布式、增量式
爬虫07 /scrapy图片爬取.中间件.selenium在scrapy中的应用.CrawlSpider.分布式.增量式 目录 爬虫07 /scrapy图片爬取.中间件.selenium在scrapy ...
- scrapy-redis实现爬虫分布式爬取分析与实现
本文链接:http://blog.csdn.net/u012150179/article/details/38091411 一 scrapy-redis实现分布式爬取分析 所谓的scrapy-redi ...
- scrapy关键字爬取百度图库(一)
刚入门学习python的菜鸟,如有错误,还望指教 爬取百度图库需要知道百度图库的加载方式是通过下拉加载的,所以我们需要分析Ajax请求来爬取每一页的数据信息 表述不清直接上图片 图片一是刷新页面后加载 ...
- scrapy-redis + Bloom Filter分布式爬取tencent社招信息
scrapy-redis + Bloom Filter分布式爬取tencent社招信息 什么是scrapy-redis 什么是 Bloom Filter 为什么需要使用scrapy-redis + B ...
- scrapy-redis分布式爬取tencent社招信息
scrapy-redis分布式爬取tencent社招信息 什么是scrapy-redis 目标任务 安装爬虫 创建爬虫 编写 items.py 编写 spiders/tencent.py 编写 pip ...
- scrapy分布式抓取基本设置
scrapy本身并不是一个为分布式爬取而设计的框架,但第三方库scrapy-redis为其扩展了分布式抓取的功能,在分布式爬虫框架中,需要使用某种通信机制协调各个爬虫工作 (1)当前的爬取任务,下载+ ...
- 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息
简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 系统环境:Fedora22(昨天已安装scrapy环境) 爬取的开始URL:ht ...
- 使用scrapy框架爬取自己的博文(2)
之前写了一篇用scrapy框架爬取自己博文的博客,后来发现对于中文的处理一直有问题- - 显示的时候 [u'python\u4e0b\u722c\u67d0\u4e2a\u7f51\u9875\u76 ...
- 如何提高scrapy的爬取效率
提高scrapy的爬取效率 增加并发: 默认scrapy开启的并发线程为32个,可以适当进行增加.在settings配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发设置 ...
随机推荐
- 树链剖分 (ZQU1607)
这道题与模板之间,多了个确定哪个为根的操作: 这道题有技巧,并不需要真正去建立以某个节点为根的树 关于路径的操作,无论以哪个点为根,得出的答案无影响: 关于对子节点进行操作的,有几种情况, 当查询节点 ...
- [Python] CondaHTTPError: HTTP 000 CONNECTION FAILED for url
CondaHTTPError: HTTP 000 CONNECTION FAILED for url 遇到这个问题 解决方法如下两个 一.C:\Users\Administrator 目录下 编辑 . ...
- win10编译OPenBlas
之前没有编译过OpenBlas,今天试了一下. 与参考博客不同之处,我的系统是win10,opencOpenBlas版本0.2.14,Visual Studio版本15. 编译使用MSYS2安装min ...
- 关于Element UI中select组件中遇到的问题
问题一:在使用select组件设置多选功能后,窗口抖动问题? 详细描述:在我使用select做多选的功能时出现了窗口抖动的问题,测试的时候发现,在有些人的电脑上抖动,有些人的电脑上不抖,找了很多文档, ...
- 【Python爬虫程序】抓取MM131美女图片,并将这些图片下载到本地指定文件夹。
一.项目名称 抓取MM131美女写真图片,并将这些图片下载到本地指定文件夹. 共有6种类型的美女图片: 性感美女 清纯美眉 美女校花 性感车模 旗袍美女 明星写真 抓取后的效果图如下,每个图集是一个独 ...
- jmeter实现服务器端后台接口性能测试
实现目的 在进行服务器端后台接口性能测试时,需要连接到Linux服务器端,然后通过命令调用socket接口,这个过程就需要用到jmeter的SSH Command取样器实现了. 脚本实现 设置CSV ...
- ClickOnce部署,修改deploymentProvider
打开 以.application 为后缀的文件,找到并修改 <deploymentProvider codebase="" /> 即可
- 谁偷偷删了你的微信?别慌!Python 揪出来
不知道你有没有经历过,想联系一位很长时间没有联系的朋友,发现对方很早以前已经把你删除了,而你还一无所知. 相信每个人的微信通信录里都存在一些「僵尸粉」,他们默默地躺在联系人列表中,你以为对方还是朋友, ...
- 查看Oracle的表中有哪些索引(用user_indexes和user_ind_columns)
用user_indexes和user_ind_columns系统表查看已经存在的索引 对于系统中已经存在的索引我们可以通过以下的两个系统视图(user_indexes和user_ind_columns ...
- 【代码学习】PYTHON装饰器
一.装饰器 对原代码不修改的基础上完善代码 写代码要遵循开放封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即: 封闭 ...