分布式部署爬蟲

redis是不支持Windows鹦筹,只支持linux照卦。有人開發(fā)了一套爬范,可以直接使用

windows下的配置:

bind 127.0.0.1將這一行注釋起來
protected_mode  no  將yes修改為no即可

redis的可視化工具:redis desktop manager

分布式部署:

  實(shí)現(xiàn)多臺電腦共同爬取

scrapy支持分布式嗎痪宰?不支持分布式

怎么辦?
有人開發(fā)了一套基于scrapy的組件scrapy-redis矾瑰,通過這套組件寫的代碼就可以實(shí)現(xiàn)分布式
https://github.com/rmax/scrapy-redis
scrapy-redis不是框架砖茸,是一套基于scrapy的組件

安裝:

pip install scrapy-redis

添加起始url

lpush qingspider:start_urls 起始的url

執(zhí)行:

scrapy runspider xxx.py

下面是關(guān)于spider 和crawlspider的官方重寫方法

redisspider的方法:

from scrapy_redis.spiders import RedisSpider

'''
如果以前你的scrapy是通過Spider寫的
現(xiàn)在你要實(shí)現(xiàn)分布式,參考這個(gè)模板即可
'''
class MySpider(RedisSpider):
    """Spider that reads urls from redis queue (myspider:start_urls)."""
    name = 'myspider_redis'
    # start_url
    redis_key = 'myspider:start_urls'

    # 構(gòu)造方法殴穴,初衷非常好凉夯,想用這個(gè)方法動(dòng)態(tài)定義允許域名列表货葬,然后就不用allowed_domains
    # 實(shí)際操作,是一個(gè)坑劲够,這個(gè)方法不能使用震桶,還得使用allowed_domains
    def __init__(self, *args, **kwargs):
        # Dynamically define the allowed domains list.
        domain = kwargs.pop('domain', '')
        self.allowed_domains = filter(None, domain.split(','))
        super(MySpider, self).__init__(*args, **kwargs)

    def parse(self, response):
        return {
            'name': response.css('title::text').extract_first(),
            'url': response.url,
        }

rediscrawlspider的方法:

from scrapy.spiders import Rule
from scrapy.linkextractors import LinkExtractor

from scrapy_redis.spiders import RedisCrawlSpider
'''
如果以前你的scrapy是通過CrawlSpider寫的
現(xiàn)在你要實(shí)現(xiàn)分布式,參考這個(gè)模板即可
'''

class MyCraw'''
如果以前你的scrapy是通過Spider寫的
現(xiàn)在你要實(shí)現(xiàn)分布式征绎,參考這個(gè)模板即可
'''ler(RedisCrawlSpider):
    """Spider that reads urls from redis queue (myspider:start_urls)."""
    name = 'mycrawler_redis'
    redis_key = 'mycrawler:start_urls'

    rules = (
        # follow all links
        Rule(LinkExtractor(), callback='parse_page', follow=True),
    )
    # 構(gòu)造方法蹲姐,初衷非常好,想用這個(gè)方法動(dòng)態(tài)定義允許域名列表人柿,然后就不用allowed_domains
    # 實(shí)際操作柴墩,是一個(gè)坑,這個(gè)方法不能使用凫岖,還得使用allowed_domains

    def __init__(self, *args, **kwargs):
        # Dynamically define the allowed domains list.
        domain = kwargs.pop('domain', '')
        self.allowed_domains = filter(None, domain.split(','))
        super(MyCrawler, self).__init__(*args, **kwargs)

    def parse_page(self, response):
        return {
            'name': response.css('title::text').extract_first(),
            'url': response.url,
        }

settings.py的配置

SPIDER_MODULES = ['example.spiders']
NEWSPIDER_MODULE = 'example.spiders'

USER_AGENT = 'scrapy-redis (+https://github.com/rolando/scrapy-redis)'

# 去重類
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 調(diào)度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 允許暫停
SCHEDULER_PERSIST = True

#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"
#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"
#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"

ITEM_PIPELINES = {
    'example.pipelines.ExamplePipeline': 300,
    # redis管道   開啟管道江咳,寫入redis,默認(rèn)是寫到本機(jī)redis服務(wù)中
    'scrapy_redis.pipelines.RedisPipeline': 400,
}

# 配置寫入其它機(jī)器redis服務(wù)
REDIS_HOST = '10.0.1.1'
REDIS_PORT = 6379

LOG_LEVEL = 'DEBUG'

# Introduce an artifical delay to make use of parallelism. to speed up the
# crawl.
DOWNLOAD_DELAY = 1

如果你想繼續(xù)用你的settings.py文檔哥放,那怎么定制你的分布式的settings的配置呢歼指?

在你的爬中文件類中寫:

    custom_settings = {
        # 去重類
        'DUPEFILTER_CLASS': "scrapy_redis.dupefilter.RFPDupeFilter",
        # 調(diào)度器
        'SCHEDULER': "scrapy_redis.scheduler.Scheduler",
        # 允許暫停
        'SCHEDULER_PERSIST': True,
        'ITEM_PIPELINES': {
            'scrapy_redis.pipelines.RedisPipeline': 400,
        },
        # 配置寫入其它機(jī)器redis服務(wù)
        'REDIS_HOST': '10.0.120.89',
        'REDIS_PORT': '6379',
        'DOWNLOAD_DELAY': 1,
    }
   其他的和spider和crawlspider一樣寫即可
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市甥雕,隨后出現(xiàn)的幾起案子踩身,更是在濱河造成了極大的恐慌,老刑警劉巖社露,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挟阻,死亡現(xiàn)場離奇詭異,居然都是意外死亡呵哨,警方通過查閱死者的電腦和手機(jī)赁濒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來孟害,“玉大人,你說我怎么就攤上這事挪拟“の瘢” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵玉组,是天一觀的道長谎柄。 經(jīng)常有香客問我,道長惯雳,這世上最難降的妖魔是什么朝巫? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮石景,結(jié)果婚禮上劈猿,老公的妹妹穿的比我還像新娘拙吉。我一直安慰自己,他們只是感情好揪荣,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布筷黔。 她就那樣靜靜地躺著,像睡著了一般仗颈。 火紅的嫁衣襯著肌膚如雪佛舱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天挨决,我揣著相機(jī)與錄音请祖,去河邊找鬼。 笑死脖祈,一個(gè)胖子當(dāng)著我的面吹牛损拢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播撒犀,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼福压,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了或舞?” 一聲冷哼從身側(cè)響起荆姆,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎映凳,沒想到半個(gè)月后胆筒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诈豌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年仆救,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矫渔。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡彤蔽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出庙洼,到底是詐尸還是另有隱情顿痪,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布油够,位于F島的核電站蚁袭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏石咬。R本人自食惡果不足惜揩悄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鬼悠。 院中可真熱鬧删性,春花似錦亏娜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至汗侵,卻和暖如春幸缕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背晰韵。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工发乔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雪猪。 一個(gè)月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓栏尚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親只恨。 傳聞我的和親對象是個(gè)殘疾皇子译仗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容