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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

第49讲:实战上手,Scrapy-Redis 分布式实现

發(fā)布時間:2024/4/11 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第49讲:实战上手,Scrapy-Redis 分布式实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在前面一節(jié)課我們了解了 Scrapy-Redis 的基本原理,本節(jié)課我們就結(jié)合之前的案例實現(xiàn)基于 Scrapy-Redis 的分布式爬蟲吧。

1.環(huán)境準備

本節(jié)案例我們基于第 46 講 —— Scrapy 和 Pyppeteer 的動態(tài)渲染頁面的抓取案例來進行學(xué)習(xí),我們需要把它改寫成基于 Redis 的分布式爬蟲。

首先我們需要把代碼下載下來,其 GitHub 地址為 https://github.com/Python3WebSpider/ScrapyPyppeteer,進入項目,試著運行代碼確保可以順利執(zhí)行,運行效果如圖所示:

其次,我們需要有一個 Redis 數(shù)據(jù)庫,可以直接下載安裝包并安裝,也可以使用 Docker 啟動,保證能正常連接和使用即可,比如我這里就在本地 localhost 啟動了一個 Redis 數(shù)據(jù)庫,運行在 6379 端口,密碼為空。

另外我們還需要安裝 Scrapy-Redis 包,安裝命令如下:

pip3 install scrapy-redis

安裝完畢之后確保其可以正常導(dǎo)入使用即可。

2.實現(xiàn)

接下來我們只需要簡單的幾步操作就可以實現(xiàn)分布式爬蟲的配置了。

2.1修改 Scheduler

在前面的課時中我們講解了 Scheduler 的概念,它是用來處理 Request、Item 等對象的調(diào)度邏輯的,默認情況下,Request 的隊列是在內(nèi)存中的,為了實現(xiàn)分布式,我們需要將隊列遷移到 Redis 中,這時候我們就需要修改 Scheduler,修改非常簡單,只需要在 settings.py 里面添加如下代碼即可:

SCHEDULER = "scrapy_redis.scheduler.Scheduler"

這里我們將 Scheduler 的類修改為 Scrapy-Redis 提供的 Scheduler 類,這樣在我們運行爬蟲時,Request 隊列就會出現(xiàn)在 Redis 中了。

2.2修改 Redis 連接信息

另外我們還需要修改下 Redis 的連接信息,這樣 Scrapy 才能成功連接到 Redis 數(shù)據(jù)庫,修改格式如下:

REDIS_URL = 'redis://[user:pass]@hostname:9001'

在這里我們需要根據(jù)如上的格式來修改,由于我的 Redis 是在本地運行的,所以在這里就不需要填寫用戶名密碼了,直接設(shè)置為如下內(nèi)容即可:

REDIS_URL = 'redis://localhost:6379'

2.3修改去重類

既然 Request 隊列遷移到了 Redis,那么相應(yīng)的去重操作我們也需要遷移到 Redis 里面,前一節(jié)課我們講解了 Dupefilter 的原理,這里我們就修改下去重類來實現(xiàn)基于 Redis 的去重:

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

2.4配置持久化

一般來說開啟了 Redis 分布式隊列之后,我們不希望爬蟲在關(guān)閉時將整個隊列和去重信息全部刪除,因為很有可能在某個情況下我們會手動關(guān)閉爬蟲或者爬蟲遭遇意外終止,為了解決這個問題,我們可以配置 Redis 隊列的持久化,修改如下:

SCHEDULER_PERSIST = True

好了,到此為止我們就完成分布式爬蟲的配置了。

3.運行

上面我們完成的實際上并不是真正意義的分布式爬蟲,因為 Redis 隊列我們使用的是本地的 Redis,所以多個爬蟲需要運行在本地才可以,如果想實現(xiàn)真正意義的分布式爬蟲,可以使用遠程 Redis,這樣我們就能在多臺主機運行爬蟲連接此 Redis 從而實現(xiàn)真正意義上的分布式爬蟲了。

不過沒關(guān)系,我們可以在本地啟動多個爬蟲驗證下爬取效果。我們在多個命令行窗口運行如下命令:

scrapy crawl book

第一個爬蟲出現(xiàn)了如下運行效果:

這時候不要關(guān)閉此窗口,再打開另外一個窗口,運行同樣的爬取命令:

scrapy crawl book

運行效果如下:

這時候我們可以觀察到它從第 24 頁開始爬取了,因為當前爬取隊列存在第一個爬蟲生成的爬取 Request,第二個爬蟲啟動時檢測到有 Request 存在就直接讀取已經(jīng)存在的 Request,然后接著爬取了。

同樣,我們可以啟動第三個、第四個爬蟲實現(xiàn)同樣的爬取功能。這樣,我們就基于 Scrapy-Redis 成功實現(xiàn)了基本的分布式爬蟲功能。

好了,本課時的內(nèi)容就講完了,我們下節(jié)課見。

總結(jié)

以上是生活随笔為你收集整理的第49讲:实战上手,Scrapy-Redis 分布式实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。