redis分布式部署
1.scrapy框架是否可以自己實現分布式?
- 不可以.原因有二.
* 其一: 因為太多台機器上部署的scrapy會各自擁有各自的排程器,這樣就是的多台機器無法分配start_url列表中的url.(多台機器無法共享同乙個排程器)
* 其二: 多台機器爬取到的資料無法通過同乙個管道資料進行統一的資料持久儲存.(多台機器無法共享同乙個管道)
2. 基於scrapy-redis元件的分布式爬蟲
- scrapy-redis元件中為我們封裝好了可以被多台機器共享的排程器和管道,我們可以直接使用並實現分布式資料爬取.
- 實現方式:
1. 基於該元件的redisspider類
2. 基於該元件的rediscrawlspider類
3.分布式實現流程: 上述兩種不同方式的分布式實現流程是統一的
- 3.2 redis配置檔案的配置:
- 注釋該行:bind 127.0.0.1,表示可以讓其他ip訪問redis- 將yes該為no:protected-mode no,表示可以讓其他ip操作redis
- 3.3 修改爬蟲檔案的相關**:
* 將爬蟲類的父類修改成基於redisspider或者rediscrawlspider.注意:如果原始爬蟲檔案是基於spider的,則應該講父類修改成redisspider,如果原始爬蟲檔案是基於crawlspider的,則應該將其父類修改成redissrawlspider.
* 注釋或刪除start_url列表,且加入redis_key屬性,屬性值為scrapy-redis元件中排程器佇列的名稱
- 3.4 在配置檔案中進行相關配置,開啟使用scrapy-redis元件中封裝好的管道
item_pipelines =
- 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 = 6379redis_encoding = 『utf-8』
redis_params =
3.7 開啟redis伺服器: redis-server配置檔案
3.8 開啟客戶端: redis-cli
3.9 執行爬蟲檔案:scrapy runspider spiderfile
3.10 向排程器佇列中扔乙個起始url(在redis客戶端中操作): lpush redis_key屬性值 起始url
基於scrapy redis的兩種分布式爬蟲
redis分布式部署 1.scrapy框架是否可以自己實現分布式?不可以。原因有二。其一 因為多台機器上部署的scrapy會各自擁有各自的排程器,這樣就使得多台機器無法分配start urls列表中的url。多台機器無法共享同乙個排程器 其二 多台機器爬取到的資料無法通過同乙個管道對資料進行統一的資...
兩種if判斷
上海面試三 下面是c語言中兩種if語句判斷方式。請問哪種寫法更好?為什麼?int a if a1 第一種判斷方式 if 1a 第二判斷方式 答 這是個主觀題,不過多數人認為第二種好。從執行效率上講,第二種效率更高。另外,在編寫 時如果不小心將 寫成 即變成 1 a 這時編譯器將會給出錯誤提示。而如果...
mysql的兩種引擎 mysql的兩種儲存引擎
背景 最近在使用spring data jpa操作mysql,在使用jpa的自動建表功能之後,處理多對多關係 manytomany的時候,spring data jpa會給中間表的兩個欄位都加上外來鍵引用。當前使用的版本預設的資料庫儲存引擎為myisam。這種儲存引擎是為資料庫查詢效能而生的,不支援...