基于scrapy-redis的分布式爬蟲 2018-11-04

一杖狼、配置redis

  • 對redis配置文件進(jìn)行配置:
    • 注釋該行:bind 127.0.0.1,表示可以讓其他ip訪問redis
    • 將yes該為no:protected-mode no,表示可以讓其他ip操作redis

二、scrapy基于redis的數(shù)據(jù)持久化操作流程

1.安裝scrapy-redis組件:

  • pip install scrapy-redis
  • scrapy-redis是基于scrapy框架開發(fā)出的一套組件,其作用就是可以讓scrapy實現(xiàn)分布式爬蟲。

2.編寫爬蟲文件:

  • 同之前scrapy中基于Spider或者CrawlSpider的編寫方式一致晶疼。

3.編寫管道文件:

  • 在scrapy-redis組件中已經(jīng)幫助我們封裝好了一個專門用于連接存儲redis數(shù)據(jù)庫的管道(RedisPipeline)酒贬,因此我們直接使用即可,無需自己編寫管道文件翠霍。

4.編寫配置文件:

  • 在settings.py中開啟管道锭吨,且指定使用scrapy-redis中封裝好的管道。
ITEM_PIPELINES = {
    'scrapy_redis.pipelines.RedisPipeline': 400
}
  • 該管道默認(rèn)會連接且將數(shù)據(jù)存儲到本機(jī)的redis服務(wù)中寒匙,如果想要連接存儲到其他redis服務(wù)中需要在settings.py中進(jìn)行如下配置:
REDIS_HOST = 'redis服務(wù)的ip地址'
REDIS_PORT = 6379
REDIS_ENCODING = ‘utf-8’
REDIS_PARAMS = {‘password’:’123456’}
  • 使用scrapy-redis組件中封裝好的調(diào)度器零如,將所有的url存儲到該指定的調(diào)度器中,從而實現(xiàn)了多臺機(jī)器的調(diào)度器共享锄弱。
# 使用scrapy-redis組件的去重隊列
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 使用scrapy-redis組件自己的調(diào)度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 是否允許暫停
SCHEDULER_PERSIST = True

5.啟動redis

  • 啟動服務(wù)端
    • mac/linux: redis-server redis.conf
    • windows: redis-server.exe redis-windows.conf
  • 啟動客戶端
    • redis-cli

6.執(zhí)行當(dāng)前爬蟲文件:

  • scrapy runspider 爬蟲文件 (注意爬蟲文件必須加上后綴名.py)

7. 向隊列中扔一個起始url

  • 在redis-cli執(zhí)行扔的操作(lpush redis_key的value值 起始url)

例:爬蟲文件

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy_redis.spiders import RedisCrawlSpider
from redisScrapyPro.items import RedisscrapyproItem
#-1.將redis數(shù)據(jù)庫的配置文件進(jìn)行改動: protected-mode no        #bind 127.0.0.1
#0.下載scrapy-redis
#1.創(chuàng)建工程
#2.創(chuàng)建基于scrawlSpider的爬蟲文件
#3.導(dǎo)入RedisCrawlSpider類
#4.將start_urls更換成redis_key屬性
#5.在現(xiàn)有代碼的基礎(chǔ)上進(jìn)行連接提取和解析操作
#6.將解析的數(shù)據(jù)值封裝到item中考蕾,然后將item對象提交到scrapy-redis組件中的管道里('scrapy_redis.pipelines.RedisPipeline': 400,)
#7.管道會將數(shù)據(jù)值寫入到指定的redis數(shù)據(jù)庫中(在配置文件中進(jìn)行指定redis數(shù)據(jù)庫ip的編寫)
#8.在當(dāng)前工程中使用scrapy-redis封裝好的調(diào)度器(在配置文件中進(jìn)行配置)
#9.將起始url扔到調(diào)度器隊列(redis_key)中
#10.啟動redis服務(wù)器:redis-server redis.windows.conf
#11.啟動redis-cli
#12.執(zhí)行當(dāng)前爬蟲文件:scrapy runspider 爬蟲文件
#13.向隊列中扔一個起始url:在redis-cli執(zhí)行扔的操作(lpush redis_key的value值 起始url)
class RedisdemoSpider(RedisCrawlSpider):
    name = 'redisDemo'
    #allowed_domains = ['www.xxx.com']
    #start_urls = ['http://www.xxx.com/']

    #scrapy_redis的調(diào)度器隊列的名稱,最終我們會根據(jù)該隊列的名稱向調(diào)度器隊列中扔一個起始url
    redis_key = "redisQueue"

    link = LinkExtractor(allow=r'/pic/page/\d+\?s=\d+')
    link1 = LinkExtractor(allow=r'/pic/page/1')
    rules = (
        Rule(link, callback='parse_item', follow=True),
        Rule(link1, callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        div_list = response.xpath('//div[@class="thumb"]')
        for div in div_list:
            img_url = "https:"+div.xpath('./a/img/@src').extract_first()
            item = RedisscrapyproItem()
            item['imgUrl'] = img_url

            yield item
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末会宪,一起剝皮案震驚了整個濱河市肖卧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掸鹅,老刑警劉巖塞帐,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異河劝,居然都是意外死亡壁榕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門赎瞎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人颊咬,你說我怎么就攤上這事务甥。” “怎么了喳篇?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵敞临,是天一觀的道長。 經(jīng)常有香客問我麸澜,道長挺尿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任炊邦,我火速辦了婚禮编矾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘馁害。我一直安慰自己窄俏,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布碘菜。 她就那樣靜靜地躺著凹蜈,像睡著了一般限寞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仰坦,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天履植,我揣著相機(jī)與錄音,去河邊找鬼悄晃。 笑死静尼,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的传泊。 我是一名探鬼主播鼠渺,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼眷细!你這毒婦竟也來了拦盹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤溪椎,失蹤者是張志新(化名)和其女友劉穎普舆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體校读,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡沼侣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了歉秫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛾洛。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖雁芙,靈堂內(nèi)的尸體忽然破棺而出轧膘,到底是詐尸還是另有隱情,我是刑警寧澤兔甘,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布谎碍,位于F島的核電站,受9級特大地震影響洞焙,放射性物質(zhì)發(fā)生泄漏蟆淀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一澡匪、第九天 我趴在偏房一處隱蔽的房頂上張望熔任。 院中可真熱鬧,春花似錦仙蛉、人聲如沸笋敞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夯巷。三九已至赛惩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間趁餐,已是汗流浹背喷兼。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留后雷,地道東北人季惯。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像臀突,于是被迫代替她去往敵國和親勉抓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

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