1. 程式人生 > >分散式爬蟲——爬取bilibili視訊資訊資源

分散式爬蟲——爬取bilibili視訊資訊資源

一、專案介紹:

爬取bilibili網站上的全部視訊資訊(不包含直播;廣告和放映廳欄);資訊量為千萬級,爬取任務較為重,所以採取分散式爬蟲。

二、說明:

a、裝置說明:

       1、mysql和redis部署在同一臺linux(也可以分開部署);         2、爬蟲部署在其他機器上;         3、另外所有機器均處於同一個區域網中;         4、採用私密ip代理

b、使用說明:

爬蟲裝置:         cd ..../bilibili - redis         ./bl-redis.sh 1    # 1.修改許可權:chmod 777 bl-redis.sh; 2、 此命令後面的數字表示要開啟的爬蟲個數,可以同時開啟多個;若是想要啟動5個爬蟲,就是./bl-redis.sh 5 redis裝置:         $ redis-cli -h 192.168.1.111 -p 6379         >> lpush BlblSpider:start_urls http://www.bilibili.com   

三、安裝

1、安裝redis

        1、檢視系統是否安裝redis(centos系統)         rpm -qa | grep "redis"         2、安裝redis         yum install redis         3、版本檢視         redis-server -v         4、測試連線:         本地:redis-cli -h 127.0.0.1 -p 6379         遠端:redis-cli -h 192.168.1.111 -p 6379         5、redis命令         刪除全部:Flushall         檢視所有key:keys *         新增key:set kk 123         檢視key:get kk         爬蟲入口url:lpush BlblSpider:start_urls http://www.bilibili.com

2、安裝 scrapy-redis

        注:程式碼為python2.7         pip2 install scrapy-redis

三、程式碼

1、redis設定

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"  # 去重機制
SCHEDULER = "scrapy_redis.scheduler.Scheduler"              # redis排程機制
SCHEDULER_PERSIST = False          # 爬蟲關閉時,是否清除redis去重
SCHEDULER_FLUSH_ON_START = True    # 爬蟲啟動時候,是否清除redis中的keys
SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"  # request佇列機制
REDIS_HOST = '192.168.1.111'        # redis 的ip地址
REDIS_PORT = 6379                   # redis 的連線埠

2、關閉爬蟲

採取擴充套件介面,呼叫extensions.py 中的函式,避免爬蟲長期空跑

MYEXT_ENABLED = True      # 開啟擴充套件
IDLE_NUMBER = 720           # 配置空閒持續時間單位為 360個 ,一個時間單位為5s。   360個:半小時

# 在 EXTENSIONS 配置,啟用擴充套件
EXTENSIONS = {
            'bilibili.extensions.RedisSpiderSmartIdleClosedExensions': 500,
        }

3、ip代理

說明:這裡採用的時 快代理 的api介面,程式碼中的介面已經失效

DOWNLOADER_MIDDLEWARES = {
    # 'bilibili.middlewares.BilibiliDownloaderMiddleware': 543,
    # 'bilibili.middlewares.ChangeProxy': 543,     # 取消此處的註釋,就可以在訪問時進行ip切換
}

另外關於ip代理需要思考的幾個問題: 1、什麼時候需要切換ip         本身的ip本ban,被拉黑了,無法繼續使用該ip請求目標網站 2、切換ip是否需要支出         (一般需要購買)免費的ip不需要花錢,不免費的ip需要花錢;但是,大部分絕大部分很大一部分的免費ip是不能用的 3、如何更優秀的切換ip         a、代理ip給我們的api,是有請求限制的,例如有的限制3s,有的限制5s,等等         b、可能我們的一個代理ip獲取後,很快就會失效了;所以,一般情況下,代理ip都是先驗證,後使用         c、很有可能一個代理ip,我們可以訪問網頁多次,才會被ban

        完善代理ip切換功能需要考慮的幾個問題:         1)ip是否可以         2)ip用多少次清除掉         3)每次獲取多少ip