分布式爬蟲-bilibili評論


實屬課程需要,不然早就放棄在半路了。維持了斷續半個多月的 bug 調試,突然就實現了。很是欣慰。網上關於分布式爬蟲的都是一些介紹,實戰的不多並且都很相似,說的雲來霧去的,只是項目的流程。可能是項目一路順風,而我 bug 不斷。也好 記錄下來供大家參考。

關於 scrapy-redis 環境配置 以及框架流程就不進行敘述了。網上也是一大堆的內容。

主要內容有:

1. 如何去寫一個分布式爬蟲

首先創建一個普通的爬蟲,在保證此爬蟲能正常運行的基礎上進行修改,然后成為分布式爬蟲。我的項目是在linux上 redis 數據庫存儲分配 requests,我寫的是 bilibili 評論抓取,項目路徑如下:

a. 將 spiders --> bilibili.py 繼承類 由 scrapy.Spider 改為 RedisSpider 。

注釋掉: "allowed_domains"  "start_urls" 
添加: redis_key = 'bilibili:start_urls'

b. setting.py 修改

# redis 數據庫連接參數
REDIS_HOST = '遠程 ip'  # windows setting
# REDIS_HOST = 'localhost' # linux setting
REDIS_PORT = 6379
REDIS_PARAMS = {
   'password': '123456' # redis 數據庫設置密碼情況下進行設置
}

# 指定使用 scrapy-redis 的調度器
SCHEDULER = 'scrapy_redis.scheduler.Scheduler'

# 指定使用 scrapy-redis 的去重機制
DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter'

# 指定排序爬取地址時的隊列
# 使用先進先出(FIFO)排序
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderPriorityQueue'

# 設置斷點續傳
SCHEDULER_PERSIST = False

DOWNLOADER_MIDDLEWARES = {   
  'spider_parallel.middlewares.SpiderParallelDownloaderMiddleware': 543, } ITEM_PIPELINES = { 'spider_parallel.pipelines.SpiderParallelPipeline': 300, 'scrapy_redis.pipelines.RedisPipeline': 400 }

2. 運行爬蟲的順序《此坑最深》

a. 先進入 linux 中 redis 數據庫

redis-cli
auth 123456

b. 服務器端運行spider:

scrapy crawl bilibili

這時看到程序一直在等待 redis 中插入 start_url

c. redis 命令行中執行:

lpush bilibili:start_urls https://api.bilibili.com/x/v2/reply?pn=1&type=1&oid=329437&sort=2

此連接即評論包的地址,oid 為視頻 av 號。你問我怎么知道的這個地址??? 爬蟲基礎在看看吧。(網頁 F12 加載的內容中查找)

d. windows 中運行 spider:

scrapy crawl bilibili

順序不對其中一個會一直處於等待監聽的狀態。還有就是我想讓 兩個spiders-->bilibili 中的 name 值不同,以此區分不同的評論是哪個爬蟲抓取的。不行,一定要相同。我的區分就是服務器端爬蟲存儲在服務器端的mongodb數據庫中,windows中爬蟲就存儲在windows中的mongodb數據庫中。存儲在同一個數據庫中也是可以的。區分時記錄爬蟲類,寫 __init__ () 函數繼承父類等內容。

沒問題就可以看到兩個爬蟲在共同抓取執行了。

項目已上傳至 git

原創不易,尊重版權。轉載請注明出處:http://www.cnblogs.com/xsmile/

 


免責聲明!

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



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