使用scrapy redis構建簡單的分布式爬蟲

2021-08-19 04:49:58 字數 3012 閱讀 3604

既然這麼好能實現分布式爬取,那都需要準備什麼呢? 

需要準備的東西比較多,都有: 

- scrapy

- scrapy-redis

- redis

- mysql

- python的mysqldb模組

- python的redis模組

為什麼要有mysql呢?是因為我們打算把收集來的資料存放到mysql中

pip install scrapy
也可以clone下相應的github位址

pip install scrapy-redis
同樣可以clone下相應的github位址

他倆具體有什麼區別呢?有知乎大神的回答

redis本身只提供了在類linux環境中安裝,不支援windows,官網如果需要在windows下做練習的朋友,可以參考我的這篇

為什麼需要這2個呢,是因為python不能直接運算元據庫,需要通過庫來支援。而這2個就是相應資料庫的支援庫。 

mysqldb:環境下可以直接下.exe來快速安裝 

redis:

pip install redis

這樣就是最簡單的了。

先來看下scrapy-redis的一些不同的地方。 

首先就是class的父物件變了,變成了特有的redisspider,這是scrapy-redis裡面自己定義的新的爬蟲型別。其次就是不再有start_urls了,取而代之的是redis_key,scrapy-redis將key從list中pop出來成為請求的url位址。

我們這次選取的物件是58同城的平板電腦資訊。

首先來看一下架構資訊。 

scrapy.cfg檔案我們可以不管,readme.rst檔案也不管(這個是github上有用的,scrapy建立專案的時候並沒有) 

pbdnof58資料夾內的結構: 

items定義檔案,settings設定檔案,pipelines處理檔案以及spiders資料夾。 

spiders資料夾盛放著我們編寫的具體爬蟲: 

可以看到裡面有2個爬蟲,乙個是用來爬所有的url位址,並將其傳遞給redis。而另外乙個則是根據爬取出來的位址處理具體的商品資訊。

具體來看。首先是settings.py

檔案。 

跟scrapy一樣,寫明spider的位置。 

2個處理資料的pipeline中的類,數字越小優先執行。 

因為資料要存放在mysql中,所以需要配置下mysql的資訊。而redis是預設採用本地的,所以並沒有配置資訊,如果是連線別的主機的話,需要配置下redis的連線位址。 

item.py

檔案

與scrapy相比多了個排程檔案,多了個itemloader類,照著做就好了,itemloader類後面會用到的。 

pipeline.py

檔案

最重要的是這個將結果儲存到mysql中。 

要在乙個名為qcl的資料庫之中建乙個名叫58pbdndb的表。qcl對應settings的配置。

create table 58pbdndb(

id int not null auto_increment,

title varchar(100) not null,

price varchar(40) not null,

quality varchar(40),

area varchar(40),

time varchar(40) not null,

primary key ( id )

)default charset=utf8;

注意:我並沒有在表的一開始檢查字段是否存在,如果你在除錯過程中不止一次的話,你可能需要多次刪除表中資料。 

58urlspider.py

檔案

這個爬蟲是用來抓取具體的商品資訊。可以看到itemloader類的add_path和add_value方法的使用。

執行方法跟scrapy相同,就是進入pbdnof58資料夾下(注意下面是只有spiders資料夾的那個).輸入

scrapy crawl myspider_58page和scrapy crawl myspider_58
可以輸入多個來觀察多程序的效果。。開啟了爬蟲之後你會發現爬蟲處於等待爬取的狀態,是因為2個list此時都為空。所以需要

lpush myspider:58_urls
來設定乙個初始位址,好啦,這樣就可以愉快的看到所有的爬蟲都動起來啦。 

最後來張資料庫的圖 

使用scrapy redis實現分布式

要實現分布式,主機之間需要共享爬取佇列和去衝集合,scrapy redis就是將request排程佇列 請求佇列和獲取的item放在了乙個多台主機可以同時訪問的redis資料庫中。剖析原始碼的工作請根據需要自行學習,直接給出settings中的配置。一 必要配置 以下配置是scrapy redis實...

scrapy redis部署總結

1.安裝 安裝scrapy redis包,開啟cmd工具,執行命令pip install scrapy redis 準備好要部署的爬蟲專案 準備好redis伺服器還有跟程式相關的mysql資料庫 開啟redis 連線上伺服器 2.部署 修改爬蟲專案的settings檔案 修改spiders爬蟲檔案 ...

scrapy redis功能簡介

connection 連線redis最基本檔案 default 預設值設定檔案 dupefiler key 儲存指紋 dupefilter 替換scrapy預設的url去重器 piklecompat 序列化 pipelines 將item儲存到redis中,實現item分布式儲存 queue 實現3...