2012-01-07 12 views
31

मैं एक साथ क्रॉल नहीं करना चाहता हूं और अवरुद्ध होना चाहता हूं। मैं प्रति सेकंड एक अनुरोध भेजना चाहता हूं।स्केपर में प्रत्येक अनुरोध के बीच देरी कैसे करें?

+1

[यहाँ] (http: // stackoverflow

तुम बस के रूप में निम्नानुसार settings.py में यह सेट करना होगा।कॉम/प्रश्न/30404364/स्केपर-देरी-अनुरोध) आपके पास एक स्पष्ट समाधान है। – hereje

उत्तर

48

कि के लिए एक setting है:

DOWNLOAD_DELAY

डिफ़ॉल्ट: 0

समय (सेकेंड में) कि डाउनलोडर इंतजार करना चाहिए इससे पहले कि ही से लगातार पृष्ठों को डाउनलोड करने की राशि वेबसाइट। सर्वरों को बहुत कठिन मारने से बचने के लिए क्रॉलिंग गति को थ्रॉटल करने के लिए इसे का उपयोग किया जा सकता है।

DOWNLOAD_DELAY = 0.25 # 250 ms of delay 

डॉक्स पढ़ें: https://doc.scrapy.org/en/latest/index.html

+0

धन्यवाद। यह काम किया :) –

+4

यदि आप 'DOWNLOAD_DELAY = 1' डालते हैं, तो मुझे नहीं लगता कि आप एक मिनट में 60 पेज प्राप्त कर सकते हैं। यह डाउनलोडिंग गति और सभी प्रकार के ओवरहेड द्वारा भी रोका जाता है। मैं कहूंगा कि यह आपको केवल एक स्क्रैपिंग ऊपरी सीमा प्रदान करता है ताकि आप लक्ष्य साइटों को बहुत अधिक प्रभावित न करें। –

7
class S(Spider): 
    rate = 1 

    def __init__(self): 
     self.download_delay = 1/float(self.rate) 

दर सेट पृष्ठों की एक अधिकतम राशि एक सेकंड में डाउनलोड किया जा सकता है।

+0

क्या आप कृपया वर्णन कर सकते हैं या यह क्या करता है इसकी कुछ व्याख्या। जैसा कि यह खड़ा है मुझे इस जवाब को हटाने के लिए वोट देना होगा। – Numeron

3

विलंब हम 2 में सेट कर सकते हैं कहते हैं: -

हम देरी क्रॉलर चलाते समय निर्दिष्ट कर सकते हैं। ईजी। scrapy क्रॉल नमूना --set DOWNLOAD_DELAY = 3

(जो दो अनुरोधों के बीच 3 सेकंड देरी का मतलब है) या फिर हम globaly settings.py में DOWNLOAD_DELAY = 3

डिफ़ॉल्ट scrapy द्वारा निर्दिष्ट कर सकते हैं लेता के बीच 0.25 सेकंड देरी 2 अनुरोध

4

यदि आप एक सेकंड की डाउनलोड देरी रखना चाहते हैं, तो DOWNLOAD_DELAY=1 सेटिंग करना इसका तरीका है।

लेकिन स्कैरेपी में AutoThrottle नामक डाउनलोड विलंब स्वचालित रूप से सेट करने की सुविधा भी है। यह स्वचालित रूप से दोनों स्क्रैप सर्वर और जिस वेबसाइट पर आप क्रॉल कर रहे हैं, के भार के आधार पर देरी सेट करता है। यह मनमाने ढंग से देरी सेट करने से बेहतर काम करता है।

पढ़ें इस बारे में आगे http://doc.scrapy.org/en/1.0/topics/autothrottle.html#autothrottle-extension
पर मैं 100 से अधिक डोमेन द्वारा क्रॉल किए गए और AutoThrottle साथ अवरुद्ध नहीं किया गया

2

DOWNLOAD_DELAY बगल में चालू है, तो आप भी scrapy की AUTOTHROTTLE सुविधा का उपयोग कर सकते हैं, https://doc.scrapy.org/en/latest/topics/autothrottle.html

यह सेटिंग्स फ़ाइल के आधार पर अनुरोधों के बीच देरी राशि बदलता है। यदि आप प्रारंभ और अधिकतम देरी दोनों के लिए 1 सेट करते हैं, तो यह प्रत्येक अनुरोध में 1 सेकंड का इंतजार करेगा।

इसका मूल उद्देश्य देरी का समय बदलना है ताकि आपके बॉट का पता लगाना कठिन हो।

AUTOTHROTTLE_ENABLED = True 
AUTOTHROTTLE_START_DELAY = 1 
AUTOTHROTTLE_MAX_DELAY = 3 
संबंधित मुद्दे