Python爬蟲5.12 — scrapy框架scrapy-redis[分佈式爬蟲]模塊的使用
綜述
本系列文檔用於對Python爬蟲技術的學習進行簡單的教程講解,鞏固自己技術知識的同時,萬一一不小心又正好對你有用那就更好了。
Python 版本是3.7.4
前面的文章我們學習了scrapy框架開發爬蟲的各種使用方法,下面我們來學習以下分佈式爬蟲的開發。
Scrapy-Redis分佈式爬蟲組件
Scrapy
是一個框架,他本身示不支持分佈式的。如果我們想要做分佈式的爬蟲,就需要藉助一個組件叫做Scrapy-Redis
,這個組件正式利用了Redis
可以分佈式的功能,集成到Scrapy
框架中,使得爬蟲可以進行分佈式。可以充分利用資源(多個IP、更多帶寬、同步爬取)來提高爬蟲的爬行效率。
分佈式爬蟲的有點
- 可以充分利用多臺機器的貸款。
- 可以充分利用多臺及其的ip地址。
- 多臺機器同時爬取,爬取數據的效率更高。
分佈式爬蟲必須要解決的問題
- 分佈式爬蟲示好幾臺機器同時運行,如何保證不同的機器爬取頁面的時候不會出現重複爬取的問題。
- 同樣,分佈式使爬蟲再不同的機器上運行,在把數據爬取完後如何保證存在同一個地方。
安裝Scrapy-Redis
pip install scrapy-redis
運行上述命令即可安裝。
Scrapy-Redis架構
Scrapy 架構圖
Scrapy-Redis 架構圖
開發分佈式爬蟲
開發
想要開發一個分佈式爬蟲,首先要開發好一個普通爬蟲,然後更改一些代碼即可。要將一個Scrapy
項目爬蟲變成一個Scrapy-Redis
項目只需要修改以下三點:
- 將爬蟲的類從
scrapy.Spider
變成scrapy_redis.spiders.RedisSpider
;或者是從scrapy.CrawlSpider
變成scrapy_redis.spiders.RedisCrawlSpider
。 - 將爬蟲中的
start_urls
刪掉,增加一個redis_key=xxx
。這個redis_key
是爲了以後在redis
中控制爬蟲啓動的。爬蟲的第一個url,就是在redis中通過這個發送出去的。 - 在配置文件中增加如下配置:
# Scrapy-Redis相關的配置
# 確保request存儲到redis中
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 確保所有爬蟲共享相關的去重指紋
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 設置redis爲item pipeline
ITEM_PIPELINES = {
'scrapy_redis.pipelines.RedisPipeline': 300,
}
# 在redis中保持scrapy-redis用到的隊列,不會清理redis中的隊列,從而可以實現暫停和恢復的功能
SCHEDULER_PERSIST = True
# 設置連接redis信息
REDIS_HOST = "192.168.1.108"
REDIS_PORT = 6379
運行
運行爬蟲需要執行下述步驟:
- 在爬蟲服務器上,進入到爬蟲文件所在的路徑,然後輸入命令:
scrapy runspider [爬蟲名字]
。 - 在
redis
服務器上,推入一個開始的url連接:redis-cli > lpush [redis_key] start_url
開始爬取。
結語
Python爬蟲系列的博文到此篇算是全部結束了,歡迎大家指正,相互學習。
其他博文鏈接
- Python爬蟲1.1 — urllib基礎用法教程
- Python爬蟲1.2 — urllib高級用法教程
- Python爬蟲1.3 — requests基礎用法教程
- Python爬蟲1.4 — requests高級用法教程
- Python爬蟲2.1 — BeautifulSoup用法教程
- Python爬蟲2.2 — xpath用法教程
- Python爬蟲3.1 — json用法教程
- Python爬蟲3.2 — csv用法教程
- Python爬蟲3.3 — txt用法教程
- Python爬蟲4.1 — threading(多線程)用法教程
- Python爬蟲4.2 — ajax(動態網頁數據抓取)用法教程
- Python爬蟲4.3 — selenium基礎用法教程
- Python爬蟲4.4 — selenium高級用法教程
- Python爬蟲4.5 — tesseract(圖片驗證碼識別)用法教程
- Python爬蟲5.1 — scrapy框架簡單入門
- Python爬蟲5.2 — scrapy框架pipeline模塊的使用
- Python爬蟲5.3 — scrapy框架spider[Request和Response]模塊的使用
- Python爬蟲5.4 — scrapy框架items模塊的使用
- Python爬蟲5.5 — scrapy框架logging模塊的使用
- Python爬蟲5.6 — scrapy框架setting模塊的使用
- Python爬蟲5.7 — scrapy框架Shell命令的使用
- Python爬蟲5.8 — scrapy框架CrawlSpider模塊的使用
- Python爬蟲5.9 — scrapy框架下載文件和圖片
- Python爬蟲5.10 — scrapy框架Download Middlewares[下載器中間件]的使用
- Python爬蟲5.11 — scrapy框架結合selenium+chromedriver的使用