scrapy-redis分布式爬蟲

來源:互聯網
上載者:User

標籤:請求   爬蟲   允許   erp   http   parse   管道   優先順序   back   

分布式問題:
    request隊列集中管理

    去重集中管理

    儲存管理

可以上github上面找一下scrapy-redis


相關模組 redis

settings相關設定

#使用scrapy-redis裡的去重組件,不使用scrapy預設的去重方式DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"#使用scrapy-redis裡的調度器組件,不使用預設的SCHEDULER = "scrapy_redis.scheduler.Scheduler"#允許暫停,redis請求記錄不丟失SCHEDULER_PERSIST = True#預設的scrapy-redis請求隊列形式(按優先順序)SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"#隊列形式,先進先出SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"#棧形式,請求先進後出SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"#只是將資料放到redis資料庫,不需要寫pipeline,儲存到mysql還是需要寫的ITEM_PIPELINES = {    ‘scrapy_redis.pipelines.RedisPipeline‘:400}#連結redis資料庫REDIS_URL = ‘redis://:@127.0.0.1:6379‘

運行分布式爬蟲

scrapy runspider myspider.py#後面的py檔案是你需要啟動並執行分布式爬蟲的檔案名稱
命令列啟動後,會在自行等待監聽redis上的url
也就是在spider上面設定的redis_key = ‘mybaike:start_url‘
然後後在redis上lpush一個健名和url#比如:    # lpush mybaike:start_url "http://www.baike.com"

redis中預設產生的健有:
myspider:requestmyspider:dupefilter#如果開啟item管道儲存在redis的資料的話,就還有這這麼一個欄位myspider:item

#在redis中刪除所有的鍵命令為:flushdb
#查看所有鍵:keys *

spider.py ##基於RedisCrawlSpider,也就是翻頁的時候使用Crawl的需要繼承與這個類
import scrapyfrom scrapy.selector import Selectorfrom Scrapy_Redist.items import ScrapyRedistItemfrom scrapy_redis.spiders import RedisCrawlSpiderfrom scrapy.linkextractor import LinkExtractorfrom scrapy.spiders import CrawlSpider,Ruleclass MybaidukeSpider(RedisCrawlSpider):                  ##基於RedisCrawlSpider    name = ‘mybaike‘    alloweb_domains = [‘baike.baidu.com‘]    # start_urls = [‘https://baike.baidu.com/item/Python/407313‘]    redis_key = ‘mybaike:start_url‘    rules = [Rule(LinkExtractor(allow=("item/(.*)")),callback="get_parse",follow=True)]    def get_parse(self,response):        items = ScrapyRedistItem()        Seit = Selector(response)        title = Seit.xpath(‘//dd[@class="lemmaWgt-lemmaTitle-title"]/h1/text()‘).extract()        contentList = Seit.xpath(‘//div[@class="lemma-summary"]//text()‘)        content = ‘‘        for c in contentList:            content += c.extract().strip()        items[‘title‘] = title        items[‘content‘] = content        yield items

 

import scrapyfrom scrapy.selector import Selectorfrom Scrapy_Redist.items import ScrapyRedistItemfrom scrapy_redis.spiders import RedisSpiderclass MybaidukeSpider(RedisSpider):    name = ‘mybaike‘    alloweb_domains = [‘baike.baidu.com‘]    # start_urls = [‘https://baike.baidu.com/item/Python/407313‘]
redis_key = ‘mybaike:start_url‘
  #這句話很重要哦,也就是寫在redis中鍵

#rules = [Rule(LinkExtractor(allow=("item/(.*)")),callback="get_parse",follow=True)]# 如果自己寫一個翻頁的花就繼承於 RedisSpider

def get_parse(self,response): items = ScrapyRedistItem() Seit = Selector(response) title = Seit.xpath(‘//dd[@class="lemmaWgt-lemmaTitle-title"]/h1/text()‘).extract() contentList = Seit.xpath(‘//div[@class="lemma-summary"]//text()‘) content = ‘‘ for c in contentList: content += c.extract().strip() items[‘title‘] = title items[‘content‘] = content yield items

其他的也就差不多一樣的了

 




 

 
 

 























scrapy-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.