日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python爬虫之基于scrapy_redis的分布式爬虫

發布時間:2024/4/15 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬虫之基于scrapy_redis的分布式爬虫 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于redis的分布式爬蟲

問題:

(1)為什么原生的scrapy框架不可以自己實現分布式爬蟲?

原因有兩個:

(1)因為多臺機器上部署的scrapy會各自擁有各自的調度器,這樣就使得多臺機器無法分配start_urls列表中的url(調度器不能被共享)

(2)多臺機器爬取到的數據無法通過同一個管道對數據進行統一的數據持久出存儲。(管道不能被共享)

(2)scrapy-redis組件的作用是什么?

它提供了可以被共享的調度器和管道

(3)如何使用scrapy-redis組件來實現分布式爬蟲?

其一:基于該組件的RedisSpider類

其二:基于該組件的RedisCrawlSpider類

但是這兩種實現分布式爬蟲的實現流程是一致的

分布式的實現流程:

1 下載scrapy-redis組件:

pip install scrapy_redis

2 創建工程

3 創建爬蟲文件:RedisSpider RedisCrawlSpider

- scrapy genspider -t crawl xxx www.xxx.com

4 對爬蟲文件中的相關屬性進行修改:

  • 導入:from scrapy_redis.spiders import RedisCrawlSpider
  • 將爬蟲類的父類修改成基于RedisSpider或者RedisCrawlSpider。注意:如果原始爬蟲文件是基于Spider的,則應該將父類修改成RedisSpider,如果原始爬蟲文件是基于CrawlSpider的,則應該將其父類修改成RedisCrawlSpider
  • 注釋或者刪除start_urls列表,切加入redis_key屬性。也就是將起始的URL列表替換成redis_key = 'xxx' (調度器隊列的名稱)

5 在配置文件中進行配置

  • 使用組件中封裝好的可以被共享的管道類

    ITEM_PIPELINES = {'scrapy_redis.pipelines.RedisPipeline': 400}
  • 配置調度器(使用組件中封裝好的可以被共享的調度器)

    增加了一個去重容器類的配置,作用使用Redis的set集合來存儲請求的指紋數據,從而實現請求去重的持久化

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
  • 使用scrapy_redis組件自己的調度器

    SCHEDULER = "scrapy_redis.scheduler.Scheduler"
  • 配置調度器是否要持久化,也就是當爬蟲結束之后,要不要清空Redis中請求隊列和去重指紋的set。如果是True,就表示要持久化存儲,就不清空數據,否則清空數據

    SCHEDULER_PERSIST = True
  • 指定存儲數據中的redis

REDIS_HOST = 'redis服務的ip地址'# 一般寫127.0.0.1REDIS_PORT = 6379

6 在redis數據庫的配置文件中修改一些數據

  • 取消保護模式:

    protected-mode no #表示可以讓其他ip操作redis
  • bind綁定:將這一行注釋掉 因為只有注釋掉了 才能進行分布式

    #bind 127.0.0.1 表示可以讓其他ip訪問redis
  • 啟動redis

開啟redis服務端:在終端中輸入 redis-server

開啟redis客戶端: 在開啟服務端之后 在終端輸入 redis-cli

7 執行分布式程序

  • 進入到項目下的spiders中

    cd 該項目 cd spiders
  • 在spiders目錄下 查看你的爬蟲文件存不存在

dir
  • 在執行此命令

    scrapy runspider xxx.py #xxx.py是你的爬蟲文件名

8 向調度器隊列中扔入一個url

  • 在redis-cli執行之后,執行此命令

    lpush chouti https://dig.chouti.com/ #這里要注意的是 chouti是 爬蟲文件中redis_key = 'chouti'#調度器隊列的名稱 后面的地址是你要爬取的網站的地址
  • 在查看redis中是否有存儲到數據

    key *

轉載于:https://www.cnblogs.com/mlhz/p/10480121.html

總結

以上是生活随笔為你收集整理的python爬虫之基于scrapy_redis的分布式爬虫的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。