1. 程式人生 > >Scrapy基於scrapy_redis實現分散式爬蟲部署

Scrapy基於scrapy_redis實現分散式爬蟲部署

準備工作

1.安裝scrapy_redis包,開啟cmd工具,執行命令pip install scrapy_redis


2.準備好一個沒有BUG,沒有報錯的爬蟲專案


3.準備好redis主伺服器還有跟程式相關的mysql資料庫

前提mysql資料庫要開啟允許遠端連線,因為mysql安裝後root使用者預設只允許本地連線,詳情請看此文章



部署過程

1.修改爬蟲專案的settings檔案

在下載的scrapy_redis包中,有一個scheduler.py檔案,裡面有一個Scheduler類,是用來排程url,還有一個dupefilter.py檔案,裡面有個類是RFPDupeFilter,是用來去重,所以要在settings任意位置

檔案中新增上它們


還有在scrapy_redis包中,有一個pipelines檔案,裡面的RedisPipeline類可以把爬蟲的資料寫入redis,更穩定安全,所以要在settings中啟動pipelines的地方啟動此pipeline


最後修改redis連線配置


2.修改spider爬蟲檔案

首先我們要引入一個scrapy_redis.spider檔案中的一個RedisSpider類,然後把spider爬蟲檔案原來繼承的scrapy.Spider類改為引入的RedisSpider這個類


接著把原來的start_urls這句程式碼註釋掉,加入redis_key = '自定義key值',一般以爬蟲名:urls命名

測試部署是否成功

直接執行我們的專案,


開啟redis客戶端在redis新增key為yunqi:start_urls的列表,值為地址


新增成功後,程式直接跑了起來


檢視資料是否插入

分散式用到的程式碼應該是同一套程式碼
1) 先把專案配置為分散式
2) 把專案拷貝到多臺伺服器中
3) 把所有爬蟲專案都跑起來
4) 在主redis-cli中lpush你的網址即可
5) 效果:所有爬蟲都開始執行,並且資料還都不一樣



相關推薦

Scrapy基於scrapy_redis實現分散式爬蟲部署

準備工作1.安裝scrapy_redis包,開啟cmd工具,執行命令pip install scrapy_redis2.準備好一個沒有BUG,沒有報錯的爬蟲專案3.準備好redis主伺服器還有跟程式相關的mysql資料庫前提mysql資料庫要開啟允許遠端連線,因為mysql安

【個人專案】基於scrapy-redis的股票分散式爬蟲實現及其股票預測演算法研究

前言 都說做計算機的,專案實踐是最能帶給人成長的。之前學習了很多的大資料和AI的知識,但是從來沒有自己做過一個既包含大資料又包含AI的專案。後來就決定做了個大資料+AI的分散式爬蟲系統。下面筆者會講述整個專案的架構,以及所用到技術點的些許介紹。 專案介紹 這個專

Scrapy基於scrapy_redis分散式爬蟲的布隆去重

1.從網上下載一個別人寫好的布隆去重py檔案百度網盤:https://pan.baidu.com/s/1KbK4WAWxAQnslIomAoQSiw 密碼:gld02.如果要想指定專案啟動布隆去重的話找到環境下的路徑E:\ENVS\JobDataScrapyEnv\Lib\s

利用scrapy-redis實現分散式爬蟲

環境要求 Python 2.7, 3.4 or 3.5 Redis >= 2.8 Scrapy >= 1.1 redis-py >= 2.10 1. 先安裝scrapy-redis sudo pip3 in

使用 scrapy-redis實現分散式爬蟲

Scrapy 和 scrapy-redis的區別 Scrapy 是一個通用的爬蟲框架,但是不支援分散式,Scrapy-redis是為了更方便地實現Scrapy分散式爬取,而提供了一些以redis為基礎的元件(僅有元件)。 pip install scr

分散式學習筆記七:基於zookeeper實現分散式

一、分散式鎖介紹         分散式鎖主要用於在分散式環境中保護跨程序、跨主機、跨網路的共享資源實現互斥訪問,以達到保證資料的一致性。 二、架構介紹     &nb

基於Redis實現分散式

背景 在很多網際網路產品應用中,有些場景需要加鎖處理,比如:秒殺,全域性遞增ID,樓層生成等等。大部分的解決方案是基於DB實現的,Redis為單程序單執行緒模式,採用佇列模式將併發訪問變成序列訪問,且多客戶端對Redis的連線並不存在競爭關係。其次Redis提供一些命令SETNX,GETSET,可以方便

C# 基於ZooKeeper實現分散式

主體思路 1. 在locks節點下建立臨時順序節點node_n2. 判斷當前建立的節點是否為locks節點下所有子節點中最小的子節點3. 是則獲取鎖,進行業務處理,否則將節點從小到大排序,監聽當前節點上一個節點的刪除事件4. 事件觸發後回到步驟2進行判斷,直至拿到鎖 程式碼塊分析 建構函

scrapy入門教程()Gerapy分散式爬蟲管理框架

一、介紹: Gerapy 是一款分散式爬蟲管理框架,支援 Python 3,基於 Scrapy、Scrapyd、Scrapyd-Client、Scrapy-Redis、Scrapyd-API、Scrapy-Splash、Jinjia2、Django、Vue.js

手把手教你搭建一個基於Java的分散式爬蟲系統

在不用爬蟲框架的情況下,我經過多方學習,嘗試實現了一個分散式爬蟲系統,並且可以將資料儲存到不同地方,類似 MySQL、HBase 等。 因為此係統基於面向介面的編碼思想來開發,所以具有一定的擴充套件性,有興趣的朋友直接看一下程式碼,就能理解其設計思想。 雖然程式碼目前

【原創】redis庫存操作,分散式鎖的四種實現方式[連載一]--基於zookeeper實現分散式

一、背景 在電商系統中,庫存的概念一定是有的,例如配一些商品的庫存,做商品秒殺活動等,而由於庫存操作頻繁且要求原子性操作,所以絕大多數電商系統都用Redis來實現庫存的加減,最近公司專案做架構升級,以微服務的形式做分散式部署,對庫存的操作也單獨封裝為一個微服務,這樣在高併發情況下,加減庫存時,就會出現超賣等

【原創】redis庫存操作,分散式鎖的四種實現方式[連載二]--基於Redisson實現分散式

一、redisson介紹 redisson實現了分散式和可擴充套件的java資料結構,支援的資料結構有:List, Set, Map, Queue, SortedSet, ConcureentMap, Lock, AtomicLong, CountDownLatch。並且是執行緒安全的,底層使用N

基於solo的分散式fabric部署

orderer節點部署(orderer.example.com) 一、建立目錄cluster。編輯crypto-config.yaml和configtx.yaml,用於生成證書和配置通道資訊,檔案內容如下 crypto-config.yaml OrdererOrgs:

基於zookeeper實現分散式

引言 在程式開發過程中不得不考慮的就是併發問題。在java中對於同一個jvm而言,jdk已經提供了lock和同步等。但是在分散式情況下,往往存在多個程序對一些資源產生競爭關係,而這些程序往往在不同的機器上,這個時候jdk中提供的已經不能滿足。分散式鎖顧明思議就是

基於 Redis 實現分散式

什麼是Redis? Redis通常被稱為資料結構伺服器。這意味著Redis通過一組命令提供對可變資料結構的訪問,這些命令使用帶有TCP套接字和簡單協議的伺服器 - 客戶端模型傳送。因此,不同的程序可以以共享方式查詢和修改相同的資料結構。 Redis中實現的資料結構有一些特殊屬性:

基於Redis實現分散式鎖-Redisson使用及原始碼分析

在分散式場景下,有很多種情況都需要實現最終一致性。在設計遠端上下文的領域事件的時候,為了保證最終一致性,在通過領域事件進行通訊的方式中,可以共享儲存(領域模型和訊息的持久化資料來源),或者做全域性XA事務(兩階段提交,資料來源可分開),也可以藉助訊息中介軟體(消

基於HttpClient實現網路爬蟲~以百度新聞為例

      在以前的工作中,實現過簡單的網路爬蟲,沒有系統的介紹過,這篇部落格就係統的介紹以下如何使用java的HttpClient實現網路爬蟲。      關於網路爬蟲的一些理論知識、實現思想以及策略問題,可以參考百度百科“網路爬蟲”,那裡已經介紹的十分詳細,這裡也不再囉嗦

.NET Core微服務之基於Exceptionless實現分散式日誌記錄

一、Exceptionless極簡介紹   Exceptionless 是一個開源的實時的日誌收集框架,它可以應用在基於 ASP.NET,ASP.NET Core,Web API,Web Forms,WPF,Console,ASP.NET MVC 等技術開發的應用程式中,並且提供了REST介面可以應

基於 Redis 實現分散式應用限流

限流的目的是通過對併發訪問/請求進行限速或者一個時間視窗內的的請求進行限速來保護系統,一旦達到限制速率則可以拒絕服務 實際場景中常用的限流策略: Nginx接入層限流 按照一定的規則如帳號、

基於Redis實現分散式訊息佇列(彙總目錄)

基於Redis實現分散式訊息佇列(1)– 緣起 基於Redis實現分散式訊息佇列(2)– 分散式訊息佇列功能設計 基於Redis實現分散式訊息佇列(3)– Redis功能分析 基於Redis實現分散式訊息佇列(4)– 程式碼實現