python ------scrapy-redis分布式爬虫

一,scrapy和scrapy-redis的区别?

    scrapy是一个爬虫通用框架,但不支持分布式,scrapy-redis是为了更方便的实现scrapy分布式爬虫,而提供了一些以redis为基础的组件

二,为什么scrapy框架不支持分布式?

    因为scrcapy中的调度对列不支持共享,而scrapy-redis中,可以共享该对列

三,scrapy-redis工作原理?

        1,爬虫程序把请求链接,发送给爬虫引擎,

        2,爬虫引擎把请求链接传递到调度对列

        3,调度sheduler会把链接存放到redis数据库中

        4,redis数据库因为具有集合的性质,对去重有更好的体现,传进来的链接会生成一个指纹,   redis会把 传进来的链接进行对比,相同的链接直接去重,把没有的链接加入到对列中,然后把链接再传递到调度对列中。

        5,调度中的对列把链接发送到下载模块

        6,下载模块,下载好数据后,把数据及下载的链接发送到爬虫程序

        7,爬虫程序把数据及链接发送到redis数据库(如果此时自定义管道,则会把数据存放到自定义的数据库中)

        8.,可以从redis数据库中把数据下载到本地

四,redis怎么去重的?

如果多台机器不仅往请求队列存,还同时从里面取,那么如何保证每台机子请求和存储的队列是不重复的呢?

借助redis集合

redis提供集合数据结构,我们知道集合里面的元素是不重复的

首先,在redis中存储每个request的指纹。

在向request队列中加入request前首先验证这个request的指纹是否已经加入到集合中。

如果已存在,则不添加requets到队列,

如果不存在,则将request添加入队列并将指纹加入集合。

五,分布式爬虫架构实际上就是:

由一台主机维护所有的爬取队列,每台从机的sheduler共享该队列,协同存储与提取。

分布式爬虫的多台协作的关键是共享爬取队列

六,队列用什么维护呢?

推荐redis队列

redis是非关系型数据库,用key-value形式存储,结构灵活,他不像关系型数据库必须要由一定的结构才能存储。

key-value可以是多种数据,非常灵活。

另外,redis是内存中的数据结构存储系统,处理速度快,性能好。

提供了队列,集合多种存储结构,方便队列维护和去重操作。

七,怎样防止中断?

在爬取的过程中,难免会有某台机子卡掉了,这时怎么办?

在每台从机scrapy启动时都会首先判断当前redis request队列是否为空。

如果不为空,则从队列中取得下一个request执行爬取。

如果为空,则重新开始开始爬取,第一台从机执行爬取想队列中添加request。

怎样实现该架构?

要做到:

维护request队列

对台从机调度reuqest

设置去重

链接redis

已经有了比较成熟的库scrapy-redis

scrapy-redis库实现了如上架构,改写了scrapy的调度器,队列等组件

利用它可以方便地实现scrapy分布式架构

https://github.com/rolando/scrapy-redis

八,步骤及代码

        1,安装redis

            启动redis服务:redis-server

            启用shell客户端:redis-cli 可以输入指令 (在这里面启动指令)

        2,修改配置文件redis.conf

        把bind:127.0.0.1注释掉,可以让其他IP也可以访问,其他爬虫端才能连接到服务端的数据库

        3,连接到服务端测试

        linux下  sudo redis-cli -h 服务端的IP  -h指定

        如果-h没有指定,就会默认在本地

        slave端无需启动radis-server,mster端启动即可,只要slave能读取到mster中的数据库就行了

        代表可以实施分布式

        4,自动构建一个scrapy框架 scrapy startproject 项目名(做修改)

        5,关于settings中代码的修改

             DOWNLOAD_DELAY =0.5 #下载延迟,就是从别人服务器上获取数据时,延迟时间    

            SCHEDULER ="scrapy_redis.scheduler.Scheduler"     #任务调度,使用scrapy-redis里面的调度器组件,不使用scrapy默认的调度器

            DUPEFILTER_CLASS ="scrapy_redis.dupefilter.RFPDupeFilter"      #去重,用的是scrapy_redis里的去重组件,不适用scrapy默认的去重

SCHEDULER_PERSIST =True   #是否开启,允许暂停,redis请求记录不丢失

SCHEDULER_QUEUE_CLASS ='scrapy_redis.queue.SpiderQueue'      #调度策略:队列,默认是scrapy_redis请求,(按优先级顺序)队列形成   (有三种形式,只是一个先后顺序,影响不大)

#指定redis数据库的主机

REDIS_HOST ='127.0.0.1' #修改为Redis的实际IP地址

REDIS_PORT =6379 #修改为Redis的实际端口

    6,爬虫程序的开发

导入需要的模块

# -*- coding: utf-8 -*-

import scrapy

from scrapy_redis.spidersimport RedisCrawlSpider

from scrapy.spidersimport CrawlSpider, Rule

from scrapy.linkextractorsimport LinkExtractor

from ..itemsimport  ScrapyRedisExampleItem

继承类也是需要改变的:

class CountrySpider(RedisCrawlSpider):

   name ='country'

    redis_key ='start_urls'  #指令,用来启动爬虫端程序的

    7,开多个运行窗口进行采集,模拟分布式,在服务端输入指令

搭建分布式最合适:对硬件的要求,在不同网段里面,各自处理各自的请求,这样才能体会到分布式的精髓


        

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容