scrapy框架之分布式爬蟲

2021-10-08 02:11:48 字數 1963 閱讀 2859

scrapy-redis元件作用:

實現流程:

修改配置檔案settings

結合著配置檔案開啟redis服務

啟動客戶端

執行工程(進入到spiders目錄下)

向排程器的佇列中放入乙個起始url:

爬取到的資料儲存在了redis的proname:items這個資料結構中

其實分布式的**並不難,主要是配置比較費時,下面**參考前一篇部落格。

import scrapy

from scrapy.linkextractors import linkextractor

from scrapy.spiders import crawlspider, rule

from scrapy_redis.spiders import rediscrawlspider

from fenbushipro.items import fenbushiproitem

class

fbsspider

(rediscrawlspider)

: name =

'fbs'

# allowed_domains = ['www.***.com']

# start_urls = ['']

redis_key =

'sun'

rules =

( rule(linkextractor(allow=r'id=1&page=\d+'

), callback=

'parse_item'

, follow=

true),

)def

parse_item

(self, response)

: li_list = response.xpath(

'/html/body/div[2]/div[3]/ul[2]/li'

)for li in li_list:

new_num = li.xpath(

'/html/body/div[2]/div[3]/ul[2]/li[1]/span[1]/text()'

).extract_first(

) new_title = li.xpath(

'/html/body/div[2]/div[3]/ul[2]/li[1]/span[3]/a/text()'

).extract_first(

)print

(new_num,new_title)

#用於測試程式是否出錯

item = fenbushiproitem(

) item[

'new_num'

]= new_num

item[

'new_title'

]= new_title

yield item

item_pipelines =

#指定可以共享的排程器

#增加了乙個去重容器類的配置,作用 使用redis的set集合來儲存請求的指紋資料,

#從而實現請求去重的持久化

dupefilter_class =

"scrapy_redis.dupefilter.rfpdupefilter"

#使用scrapy_redis元件自己的排程器

scheduler =

"scrapy_redis.scheduler.scheduler"

#配置排程器是否要持久化,也就是當爬蟲結束了,要不要清空redis中請求佇列和去重指紋的

#set。如果是true,不清空

scheduler_persist=

true

#指定伺服器

redis_host =

'127.0.0.1'

redis_port =

6379

scrapy 分布式爬蟲

scrapy redis元件作用 修改配置檔案settings 使用scrapy redis元件自己的排程器 配置排程器是否要持久化,也就是當爬蟲結束了,要不要清空redis中請求佇列和去重指紋的set。如果是true,就表示要持久化儲存,就不清空資料,否則清空資料 redis port 6379 ...

scrapy如何實現分布式爬蟲

使用scrapy爬蟲的時候,記錄一下如何分布式爬蟲問題 關鍵在於多台主機協作的關鍵 共享爬蟲佇列 主機 維護爬取佇列 從機 負責資料抓取,資料處理,資料儲存 佇列如何維護 redis佇列 redis 非關係型資料庫,key value形式儲存,結構靈活。是記憶體中的資料結構儲存系統,處理速度快,效能...

分布式之分布式事務

被人問到分布式事務,之前學rabbitmq 的時候學到過rabbitmq 高階的事務,因為沒有用過,所有沒有回答好。這裡總結一下。1.單機版事務。事務的四大特性 acid a.原子性 b.一致性 c.隔離性 d.永續性 單機事務可以通過設定事務的隔離級別 參見spring 的事務隔離級別 2.分布式...