redis初識

來源:互聯網
上載者:User

標籤:

最近寫了一個爬蟲,想對它最佳化一下,就想到了可以使用scrapy + redis實現一個分布式爬蟲,今天就學習學習redis。

一 Redis簡介

redis是一個高效能的key-value資料庫,它是將資料存放區在記憶體當中,因此相對而言比較快速,且效能極高。

與其它的key-value資料庫相同的是:
1.支援資料的持久化,重啟的時候資料可以再次載入使用;
2.不僅僅支援key-value類型的資料,還支援list,set,zset,hash等資料結構;
3.支援資料備份
不同點:
1.redis有著更為複雜的資料結構並且提供對它們的原子性操作;
1.redis運行在記憶體中但是可以持久化到磁碟所以說資料量不能大於硬體記憶體;相比在磁碟上相同的複雜的資料結構,在記憶體中操作起來相對簡單。

Redis資料類型
支援五種資料類型:string(字串),hash(雜湊),list,set,zset(有序集合)
string類型是二進位安全的,也就是string可以包含任何資料;
hash是一個索引值對集合,是一個string類型的field和value的映射表,hash特別適合用於儲存物件;
list是一個簡單的字串列表,按照插入順序排序;
set是string類型的無序集合集合是通過雜湊表實現的,所以添加,刪除,尋找的複雜度都是O(1)。使用sadd命令添加一個string元素到key,對應的set集合中,成功則返回1,如果元素已經在集合中則返回0;
zset和set不同的是每個元素都會關聯一個double類型的分數,redis通過分數來為集合中的成員進行從小到大的排序。添加元素的命令是zadd命令。

Redis鍵(key)
redis鍵命令的基本文法是:COMMAND KEY_NAME

Redis HyperLogLog
用來做基數統計的演算法,優點是當輸入元素的數量或提及非常非常大時,計算基數所需的空間很小。
基數?對於資料集{1,3,5,7,5,7,8}的基數集是{1,3,5,7,8},基數為5。技術就是在誤差可接受的範圍內,快速計算基數。
所用到的命令如下:
PFADD:添加指定元素到HyperLogLog中
PFCOUNT:返回給定HyperLogLog的技術估算值
PFMERGE:將多個HyperLogLog合并為一個

二  關於分布式爬蟲

redis如何?爬蟲分布式的中心:將所有爬蟲擷取到的url都放到一個redis queue中,並且所有的爬蟲都從單個的redis queue中擷取request。爬蟲預設的是廣度優先搜尋,假定現在有兩個爬蟲,那麼是如何?分布式,具體的步驟如下:

首先運行爬蟲A,爬蟲引擎請求spider A中的start_urls中的連結並交割給調度器,進而引擎向調度器請求爬取的url並交給下載器下載,下載後的response交給spider,spider根據定義的rules得到連結,繼續通過引擎交給調度器。
進而啟動B,B的start_urls首先交給和A中的調度器相同的,而B的引擎請求爬取url時,調度器調度給B下載的url還是A中沒下載完的url,這時A和同時下載A中未完成的連結,待完成後,同時下載B的要求連結。
在scrapy-redis中預設使用的是SpiderPriorityQueue方式,這是由sorted set實現的一種非FIFO,LIFO方式。

每次執行重新爬取時,應該將redis中儲存的資料清空,否則會影響爬蟲現象。

request和url的區別:request是由spider完成,spider會返回request給scrapy引擎進而交割調度器.url也是在spider中定義或由spider擷取

在scrapy中crawler是包含spider的,scrapy的架構就是spider,spider的作用是提供start_url,根據下載到的response分析擷取想要的內容繼續提取url。

如果使用Python+redis+其它資料庫實現分布式爬蟲儲存資料,其中的redis只用作url的儲存,不關乎爬蟲得到的具體資料,設定slave上的scrapy-redis擷取url的地址為master地址,儘管有多個slave,然而擷取url只能從伺服器上的redis資料庫。並且,由於scrapy-redis自身的隊列機制,slave擷取的連結不會相互衝突。各個slave在完成抓取任務之後,將結果匯總到伺服器上(這時的儲存不再是redis,可以是mongodb或者mysql等)

對於已有的scrapy程式,擴充分布式程式步驟如下:
1.找一台高效能伺服器,用於redis隊列的維護以及資料的儲存;
2.擴充scrapy程式,讓其通過伺服器的redis來擷取start_urls,並改寫pipeline裡資料存放區部分,把儲存地址改為伺服器位址。
3。在伺服器上寫一些產生url的指令碼,並定期執行。

防抓取屏蔽的方法
1.設定download_delay,但會降低爬蟲效率;
2.隨機產生user_agent,或者重寫middleware,讓程式每次運行都可以隨機擷取user_agent;
3.設定代理ip池;
4.設定好header裡的domian和host

關於使用隨機user-agent的方法
在settings.py中添加如下代碼:
DOWNLOADER_MIDDLEWARES = {
‘scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware‘ : None,
‘Crawler.comm.rotate_useragent.RotateUserAgentMiddleware‘ :400
}

相應的在對應的爬蟲代碼中添加一個user-agent的列表如下:
user_agent_list = [\
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"\
"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",\
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",\
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",\
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",\
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",\
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",\
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",\
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",\
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",\
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",\
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",\
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",\
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",\
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",\
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",\
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",\
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

redis初識

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.