2017-10-25 5 views
0

ここに私の治療ストラテジストがあります。ダウンロード速度を制限する方法として、1分間に20回の治療を受けるためのURLを得ることは遅いですか?

import scrapy,urllib.request 

AUTOTHROTTLE_ENABLED = True 
AUTOTHROTTLE_START_DELAY = 3 
AUTOTHROTTLE_MAX_DELAY = 6 

CONCURRENT_REQUESTS_PER_IP = 1 
CONCURRENT_REQUESTS = 1 
CONCURRENT_REQUESTS_PER_SPIDER = 1 
CLOSESPIDER_PAGECOUNT = 100000 
CLOSESPIDER_TIMEOUT = 36000 
DOWNLOAD_DELAY = 3 
RETRY_ENABLED = False 
COOKIES_ENABLED = False 
RETRY_ENABLED = True 
RETRY_TIMES = 1 
COOKIES_ENABLED = False 

class TestSpider(scrapy.Spider): 
    name = "quotes" 
    allowed_domains = ["some web"] 

    def __init__(self, *args, **kw): 
     self.timeout = 10 

    def start_requests(self): 
     yield scrapy.Request(url,callback=self.parse)  

    def parse(self, response): 
     do something 

コマンドscrapy runspider test.pyで実行しているときにコンソールに表示される情報の概要。

'downloader/request_count': 3391, 
'finish_time': datetime.datetime(2017, 10, 25, 12, 29, 43, 101017), 
'start_time': datetime.datetime(2017, 10, 25, 12, 24, 10, 63516)} 

総時間= 29min-24minの+(43-10)= 5min33second = 333秒
総要求= 3391
は、我々はそれが毎秒10件のURLを取得する限り迅速に実行することができます結論を出します。

なぜDOWNLOAD_DELAY = 3AUTOTHROTTLE_ENABLED = True,AUTOTHROTTLE_START_DELAY = 3AUTOTHROTTLE_MAX_DELAY = 6は速度を低下させることができませんか?

ダウンロード速度を1分あたり20のURLを取得するのと同じくらい遅くするにはどうすればよいですか?

答えて

1

このクモを試してみてください(例:CONCURRENT_REQUESTS_PER_SPIDERのために、すでに廃止されました)冗長設定を削除してみてください、それは毎分20のリクエストに囲まれたアッパーです:

import scrapy 
from datetime import datetime 


class QuotesSpider(scrapy.Spider): 
    name = "quotes" 
    start_urls = [ 
     'http://quotes.toscrape.com/page/1/', 
    ] 

    custom_settings = { 
     'CONCURRENT_REQUESTS': 1, 
     'DOWNLOAD_DELAY': 3, 
     'AUTOTHROTTLE_ENABLED': False, 
     'RANDOMIZE_DOWNLOAD_DELAY': False 
    } 

    def parse(self, response): 
     self.logger.debug('%s', datetime.utcnow()) 
     for quote in response.css('div.quote'): 
      yield { 
       'text': quote.css('span.text::text').extract_first(), 
       'author': quote.css('span small::text').extract_first(), 
       'tags': quote.css('div.tags a.tag::text').extract(), 
      } 

     next_page = response.css('li.next a::attr(href)').extract_first() 
     if next_page is not None: 
      yield scrapy.Request(response.urljoin(next_page), callback=self.parse) 
関連する問題