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.分布式...