2015-05-22 31 views
6

za każdym razem, gdy uruchomię mój kod, moje IP zostanie zbanowane. Potrzebuję pomocy, aby opóźnić każde żądanie o 10 sekund. Próbowałem umieścić DOWNLOAD_DELAY w kodzie, ale nie daje wyników. Każda pomoc jest doceniana.Żądanie opóźnienia Scrapy

+0

spróbować tego przed żądanie time.sleep (10) – Ajay

+0

Gdzie należy umieścić time.sleep() dokładnie? –

+0

może być po tej linii, myślę, że absolute_url = self.BASE_URL + link – Ajay

Odpowiedz

10

Musisz ustawić DOWNLOAD_DELAY in settings.py swojego projektu. Zauważ, że może być również konieczne ograniczenie współbieżności. Domyślnie współbieżność wynosi 8, więc uderzasz w witrynę z 8 równoczesnymi żądaniami.

# settings.py 
DOWNLOAD_DELAY = 1 
CONCURRENT_REQUESTS_PER_DOMAIN = 2 

Począwszy Scrapy 1.0 można również umieścić ustawień niestandardowych w pająka, więc można zrobić coś takiego:

class DmozSpider(Spider): 
    name = "dmoz" 
    allowed_domains = ["dmoz.org"] 
    start_urls = [ 
     "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", 
     "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/", 
    ] 

    custom_settings = { 
     "DOWNLOAD_DELAY": 5, 
     "CONCURRENT_REQUESTS_PER_DOMAIN": 2 
    } 

Delay i współbieżności są ustawiane za downloader gniazda nie za żądań. Aby sprawdzić, co faktycznie Pobierz Niektórych można spróbować coś takiego

def parse(self, response): 
    """ 
    """ 
    delay = self.crawler.engine.downloader.slots["www.dmoz.org"].delay 
    concurrency = self.crawler.engine.downloader.slots["www.dmoz.org"].concurrency 
    self.log("Delay {}, concurrency {} for request {}".format(delay, concurrency, response.request)) 
    return 
+0

Wystarczy, że zanotujemy, że możliwe jest skonfigurowanie 'download_delay' na pająka nawet w wersji 0.24, zgodnie z adresem URL, z którym się łączyłeś:' Możesz również zmienić to ustawienie na pająka, ustawiając atrybut pająka download_delay. " – bosnjak