17.基於scrapy-redis兩種形式的分布式爬蟲


redis分布式部署

    1.scrapy框架是否可以自己實現分布式?

    - 不可以。原因有二。

      其一:因為多台機器上部署的scrapy會各自擁有各自的調度器,這樣就使得多台機器無法分配start_urls列表中的url。(多台機器無法共享同一個調度器)

      其二:多台機器爬取到的數據無法通過同一個管道對數據進行統一的數據持久出存儲。(多台機器無法共享同一個管道)

    2.基於scrapy-redis組件的分布式爬蟲

        - scrapy-redis組件中為我們封裝好了可以被多台機器共享的調度器和管道,我們可以直接使用並實現分布式數據爬取。

        - 實現方式:

            1.基於該組件的RedisSpider類

            2.基於該組件的RedisCrawlSpider類

    3.分布式實現流程:上述兩種不同方式的分布式實現流程是統一的

        - 3.1 下載scrapy-redis組件:pip install scrapy-redis

        - 3.2 redis配置文件的配置:

- 注釋該行:bind 127.0.0.1,表示可以讓其他ip訪問redis

- 將yes該為no:protected-mode no,表示可以讓其他ip操作redis

        3.3 修改爬蟲文件中的相關代碼:

            - 將爬蟲類的父類修改成基於RedisSpider或者RedisCrawlSpider。注意:如果原始爬蟲文件是基於Spider的,則應該將父類修改成RedisSpider,如果原始爬蟲文件是基於CrawlSpider的,則應該將其父類修改成RedisCrawlSpider。

            - 注釋或者刪除start_urls列表,切加入redis_key屬性,屬性值為scrpy-redis組件中調度器隊列的名稱

        3.4 在配置文件中進行相關配置,開啟使用scrapy-redis組件中封裝好的管道

        

ITEM_PIPELINES = {
    'scrapy_redis.pipelines.RedisPipeline': 400
}

        3.5 在配置文件中進行相關配置,開啟使用scrapy-redis組件中封裝好的調度器

# 使用scrapy-redis組件的去重隊列
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 使用scrapy-redis組件自己的調度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 是否允許暫停
SCHEDULER_PERSIST = True

        3.6 在配置文件中進行爬蟲程序鏈接redis的配置:

REDIS_HOST = 'redis服務的ip地址'
REDIS_PORT = 6379
REDIS_ENCODING = ‘utf-8’
REDIS_PARAMS = {‘password’:’123456’}

        3.7 開啟redis服務器:redis-server 配置文件

        3.8 開啟redis客戶端:redis-cli

        3.9 運行爬蟲文件:scrapy runspider SpiderFile

        3.10 向調度器隊列中扔入一個起始url(在redis客戶端中操作):lpush redis_key屬性值 起始url


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM