1. 準備工作
成功實現Scrapy爬蟲,Scrapy_Redis庫正確安裝
2. 搭建Redis服務器
推薦使用Linux服務器(阿里雲,騰訊雲,Azure等雲主機,配有公網IP)
部分商家的服務器需要配置安全組放通Redis運行端口才可以遠程訪問。
記錄Redis的IP,端口,地址,供後面配置分佈式爬蟲使用。
3. 部署代理池和Cookies池
如沒有,可不用設置。
如有,需要代理池和Cookies池放到公網訪問的服務器上,上傳服務器,修改Redis的連接信息配置,用同樣的方式運行代理池和Cookies池
遠程訪問代理池和Cookies池提供的接口,來獲取隨機代理和Cookies。
問題排查:如不能遠程訪問,先確保其在0.0.0.0這個Host上運行,再檢查安全組的配置。
訪問鏈接:PROXY_URL = 'http://120.27.34.25:5555/random' #服務器的IP
COOKIES_URL = 'http://120.27.34.25:5556/weibo/random' #新浪微博舉例,服務器的IP
4. 配置Scrapy-Redis
配置Scrapy-Redis非常簡單,只需要修改一下settings.py配置文件即可。
· 核心配置
將調度器的類和去重的類替換為Scrapy-Redis提供的類
在settings.py的配置
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
· Redis 連接配置
兩種連接方式
第一種:通過連接字符串配置,用Redis的地址、端口、密碼構造一個Redis連接字符串
redis://[:password]@host:port/db
rediss://[:password]@host:port/db
unix://[:password]@/path/to/socket.sock?db=db
說明:password是密碼,比如以冒號開頭,中括號代表此選項可有可無,host 是Redis地址,port是運行端口,db是數據庫代號,其值默認是0
在settings.py設置REDIS_URL變量
REDIS_URL = 'redis://:[email protected]:6379'
第二種:分項單獨配置
在settings.py中設置:
REDIS_HOST = '120.27.34.25'
REDIS_PORT = 6379
REDIS_PASSWORD = 'foobared'
· 配置調度隊列
可選配置,默認使用PriorityQueue。如果想要更改配置,可以配置SCHEDULER_QUEUE_CLASS變量,任選其一配置。
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.PriorityQueue'
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.FifoQueue'
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.LifoQueue'
· 配置持久化
可選的配置,默認是False。Scrapy-Redis默認會在爬取全部完成後清空爬取隊列和去重指紋集合。
如果不想自動清空爬取隊列和去重指紋集合,可以增加如下配置:
SCHEDULER_PERSIST = True
設置為True後爬取隊列和去重指紋集合不會在爬取完成後自動清空,如果不配置,默認False,即自動清空。
· 配置重爬
可選配置,默認是False。如果配置了持久化或強制中斷了爬蟲,那麼爬取隊列和指紋集合不會被清空,爬蟲重新啟動後會接著上次爬取。
如果想重新爬取,可以配置重爬的選項:SCHEDULER_FLUSH_ON_START = True
設置為True之後,爬蟲每次啟動時,爬取隊列和指紋集合都會清空。
注意:分佈式爬取:必須保證只能清空一次,否則每個爬蟲任務在啟動時都清空一次,將會把之前的爬取隊列清空,勢必影響分佈式爬取。
此配置在單機爬取時比較方便,分佈式爬取不常用此配置。
· Pipeline配置
可選配置,默認不啟動Pipeline。Scrapy-Redis實現了一個存儲到Redis的Item Pipeline,啟用了Pipeline之後,爬蟲會把生成的Item存儲到Redis數據庫。
數據量較大時,一般不這樣做。因為Redis基於內存的,利用它處理速度快的特性,做存儲太浪費。配置如下:
ITEM_PIPELINES = {
'scrapy_redis.pipelines.RedisPipeline': 300
}
· Scrapy-Redis配置完成
5. 配置存儲目標
爬蟲程序分發到各臺主機的時候,爬蟲會鏈接各自的數據庫,需要在每臺主機上都安裝MongoDB。兩個缺點1.搭建數據庫環境比較繁瑣2.各臺主機的爬蟲會把數據分散存到各自主機上,不方便統一管理。
最好將存儲目標存到同一個地方。
6. 運行
每臺主機上執行如下命令,即可啟動爬取:
scrapy crawl xxx
7. 結果
Redis數據庫信息
兩個Key:xxx:dupefilter,用來存儲指紋
xxx:requests,爬取隊列
至此:分佈式爬蟲部署成功。
閱讀更多 流風不凍0205 的文章