scrapy-redis分布式爬蟲使用詳解


redis相關

全稱為remote dictionary server。國內使用到的公司也很多。

其關鍵字可以歸納為:

 

1.開源
並以實際應用驅動。
2.key-value
這種KV特性將其與關系型數據庫本質的區別開來。這也是redis流行的關鍵因素所在。
3.內存數據庫
這種將數據存儲在內存中是redis性能(主要針對存取速度)優於硬盤數據庫的根本。為了便於數據長久保存,其也支持持久化操作。

redis特性

1.豐富的數據類型與相應操作。每種數據類型都有特定的應用場景。
2.性能極高。
3.功能豐富。提供的進階特性能夠滿足數據庫使用需求。


 redis數據結構

包括string/hash/list/set/zset,針對每種結構的使用情景可見文章:redis之其中武器。
hash特點就是在string基礎上可實現單個key的多個filed的存儲;list就不用說了,就是雙向鏈表的特性。set就是集合,它和list的區別體現在value的有序性和唯一性上,操作上更貼近集合的概念,提供交集、並集等。zset相比set多了一個score項,並利用其實現value的排序。

redis進階特性

1.事物。一組命令的集合。
2.生存時間。可用來實現緩存。
3.排序。
4.任務隊列。
5.管道。


 redis客戶端

可以在redis官網上查看針對各個語言的客戶端,所謂的客戶端就是通過相應的語言接口實現對redis的操作。我是用的python,官方推薦redis-py,可通過pip install redis-py安裝。

redis資料匯總

這里提供幾個實時更新的匯總站。
首先就是redis位於GitHub上的repository的wiki(https://github.com/antirez/redis/wiki),上面提供了一些鏈接,並且你會發現一些是中文鏈接。在scrapy的wiki中也有這樣的現象,你可以發現中國的用戶量了吧。

其次是redis中文網站。

 

 

二、scrapy-redis實現scrapy分布式爬取分析的原理

scrapy-redis原理: 
1.spider解析下載器下載下來的response,返回item或者是links 
2.item或者links經過spidermiddleware的process_spider_out()方法,交給engine。 
3.engine將item交給itempipeline,將links交給調度器 
4.在調度器中,先將request對象利用scrapy內置的指紋函數,生成一個指紋對象 
5.如果request對象中的dont_filter參數設置為False,並且該request對象的指紋不在信息指紋的隊列中,那么就把該request對象放到優先級的隊列中 
6.從優先級隊列中獲取request對象,交給engine 
7.engine將request對象交給下載器下載,期間會通過downloadmiddleware的process_request()方法 
8.下載器完成下載,獲得response對象,將該對象交給engine,期間會通過downloadmiddleware的process_response()方法 
9.engine將獲得的response對象交給spider進行解析,期間會經過spidermiddleware的process_spider_input()方法 
10.從第一步開始循環

上面的十個步驟就是scrapy-redis的整體框架,與scrapy相差無幾。本質的區別就是,將scrapy的內置的去重的隊列和待抓取的request隊列換成了redis的集合。就這一個小小的改動,就使得了scrapy-redis支持了分布式抓取。

 三、需要用到的模塊 

scrapy 
scrapy-redis 
redis 
mysql :收集來的數據存放到mysql中
python的mysqldb模塊 
python的redis模塊 
  后面倆個庫:python不能直接操作數據庫,需要通過庫來支持。而這2個就是相應數據庫的支持庫。
  結構化數據可以使用mysql節省空間,非結構化、文本等數據可以采用mongodb等非關系型數據提高訪問速度。
 
 
參考文章來源:
http://blog.csdn.net/u012150179/article/details/38077851
http://blog.csdn.net/howtogetout/article/details/51633814


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM