scrapy基礎知識之 RedisCrawlSpider:


這個RedisCrawlSpider類爬蟲繼承了RedisCrawlSpider,能夠支持分布式的抓取。因為采用的是crawlSpider,所以需要遵守Rule規則,以及callback不能寫parse()方法。

同樣也不再有start_urls了,取而代之的是redis_key,scrapy-redis將key從Redis里pop出來,成為請求的url地址。

from scrapy.spiders import Rule from scrapy.linkextractors import LinkExtractor from scrapy_redis.spiders import RedisCrawlSpider class MyCrawler(RedisCrawlSpider):  name = 'mycrawler_redis' redis_key = 'mycrawler:start_urls' rules = ( # follow all links Rule(LinkExtractor(), callback='parse_page', follow=True), ) # __init__方法必須按規定寫,使用時只需要修改super()里的類名參數即可 def __init__(self, *args, **kwargs): # Dynamically define the allowed domains list. domain = kwargs.pop('domain', '') self.allowed_domains = filter(None, domain.split(',')) # 修改這里的類名為當前類名 super(MyCrawler, self).__init__(*args, **kwargs) def parse_page(self, response): return { 'name': response.css('title::text').extract_first(), 'url': response.url, }

注意:

同樣的,RedisCrawlSpider類不需要寫allowd_domainsstart_urls

  1. scrapy-redis將從在構造方法__init__()里動態定義爬蟲爬取域范圍,也可以選擇直接寫allowd_domains

  2. 必須指定redis_key,即啟動爬蟲的命令,參考格式:redis_key = 'myspider:start_urls'

  3. 根據指定的格式,start_urls將在 Master端的 redis-cli 里 lpush 到 Redis數據庫里,RedisSpider 將在數據庫里獲取start_urls。

執行方式:

  1. 通過runspider方法執行爬蟲的py文件(也可以分次執行多條),爬蟲(們)將處於等待准備狀態:

    scrapy runspider mycrawler_redis.py

  2. 在Master端的redis-cli輸入push指令,參考格式:

    $redis > lpush mycrawler:start_urls http://www.dmoz.org/

  3. 爬蟲獲取url,開始執行。

 


免責聲明!

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



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