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
Odpowiedz
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
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
spróbować tego przed żądanie time.sleep (10) – Ajay
Gdzie należy umieścić time.sleep() dokładnie? –
może być po tej linii, myślę, że absolute_url = self.BASE_URL + link – Ajay