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

歡迎訪問 生活随笔!

生活随笔

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

python

Python爬虫从入门到放弃(二十)之 Scrapy分布式原理

發布時間:2025/3/15 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python爬虫从入门到放弃(二十)之 Scrapy分布式原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址https://www.cnblogs.com/zhaof/p/7306374.html

關于Scrapy工作流程回顧

Scrapy單機架構

上圖的架構其實就是一種單機架構,只在本機維護一個爬取隊列,Scheduler進行調度,而要實現多態服務器共同爬取數據關鍵就是共享爬取隊列。

?

這里重要的就是我的隊列通過什么維護?
這里一般我們通過Redis為維護,Redis,非關系型數據庫,Key-Value形式存儲,結構靈活。
并且redis是內存中的數據結構存儲系統,處理速度快,提供隊列集合等多種存儲結構,方便隊列維護

如何去重?
這里借助redis的集合,redis提供集合數據結構,在redis集合中存儲每個request的指紋
在向request隊列中加入Request前先驗證這個Request的指紋是否已經加入集合中。如果已經存在則不添加到request隊列中,如果不存在,則將request加入到隊列并將指紋加入集合

如何防止中斷?如果某個slave因為特殊原因宕機,如何解決?
這里是做了啟動判斷,在每臺slave的Scrapy啟動的時候都會判斷當前redis request隊列是否為空
如果不為空,則從隊列中獲取下一個request執行爬取。如果為空則重新開始爬取,第一臺叢集執行爬取向隊列中添加request

如何實現上述這種架構?
這里有一個scrapy-redis的庫,為我們提供了上述的這些功能
scrapy-redis改寫了Scrapy的調度器,隊列等組件,利用他可以方便的實現Scrapy分布式架構
關于scrapy-redis的地址:https://github.com/rmax/scrapy-redis

搭建分布式爬蟲

參考官網地址:https://scrapy-redis.readthedocs.io/en/stable/

前提是要安裝scrapy_redis模塊:pip install scrapy_redis
這里的爬蟲代碼是用的之前寫過的爬取知乎用戶信息的爬蟲

修改該settings中的配置信息:

替換scrapy調度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"

添加去重的class
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

添加pipeline
如果添加這行配置,每次爬取的數據也都會入到redis數據庫中,所以一般這里不做這個配置
ITEM_PIPELINES = {
'scrapy_redis.pipelines.RedisPipeline': 300
}

共享的爬取隊列,這里用需要redis的連接信息
這里的user:pass表示用戶名和密碼,如果沒有則為空就可以
REDIS_URL = 'redis://user:pass@hostname:9001'

設置為為True則不會清空redis里的dupefilter和requests隊列
這樣設置后指紋和請求隊列則會一直保存在redis數據庫中,默認為False,一般不進行設置

SCHEDULER_PERSIST = True

設置重啟爬蟲時是否清空爬取隊列
這樣每次重啟爬蟲都會清空指紋和請求隊列,一般設置為False
SCHEDULER_FLUSH_ON_START=True

分布式

將上述更改后的代碼拷貝的各個服務器,當然關于數據庫這里可以在每個服務器上都安裝數據,也可以共用一個數據,我這里方面是連接的同一個mongodb數據庫,當然各個服務器上也不能忘記:
所有的服務器都要安裝scrapy,scrapy_redis,pymongo

這樣運行各個爬蟲程序啟動后,在redis數據庫就可以看到如下內容,dupefilter是指紋隊列,requests是請求隊列

?

?

轉載于:https://www.cnblogs.com/111testing/p/10325428.html

總結

以上是生活随笔為你收集整理的Python爬虫从入门到放弃(二十)之 Scrapy分布式原理的全部內容,希望文章能夠幫你解決所遇到的問題。

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