Scrapy गाइड · 2 मिनट पढ़ें

Scrapy के साथ प्रॉक्सी का उपयोग कैसे करें

Scrapy प्रत्येक अनुरोध को तीन तरीकों में से एक के माध्यम से प्रॉक्सी के माध्यम से रूट करता है: एक प्रति-अनुरोध मेटा कुंजी, एक पर्यावरण चर, या एक घूर्णन डाउनलोडर मिडलवेयर। यहाँ प्रत्येक है, प्रमाणित s4m प्रॉक्सियों के लिए कार्यशील कोड के साथ।

तीन तरीके जिनसे Scrapy प्रॉक्सी से बात करता है

Scrapy एक HttpProxyMiddleware प्रदान करता है जो डिफ़ॉल्ट रूप से सक्षम होता है। यह प्रॉक्सी को दो स्थानों में से एक से पढ़ता है: एक अनुरोध के meta डिक्ट पर proxy कुंजी, या मानक http_proxy / https_proxy पर्यावरण चर। पूरे क्रॉल के लिए एक निश्चित प्रॉक्सी के लिए, पर्यावरण चर सबसे तेज़ रास्ता है; प्रति-अनुरोध नियंत्रण और रोटेशन के लिए, request.meta["proxy"] को स्वयं सेट करें, आमतौर पर एक कस्टम डाउनलोडर मिडलवेयर से।

प्रमाणीकरण वह हिस्सा है जिसे लोग छोड़ देते हैं। Scrapy नहीं पढ़ता USER:PASS@ प्रॉक्सी URL से जिस तरह curl करता है — यह एक Proxy-Authorization हेडर की अपेक्षा करता है। साफ़ तरीका यह है कि उस हेडर को एक बार बनाएं और इसे अपने मिडलवेयर में संलग्न करें। s4m प्रॉक्सियाँ USER:PASS के साथ proxy.s4m.online, HTTP पर पोर्ट 3128 (Scrapy के HTTP प्रॉक्सी मिडलवेयर के लिए स्वाभाविक रूप से उपयुक्त) के खिलाफ प्रमाणीकरण करती हैं। SOCKS5 के लिए आप क्रॉल को एक स्थानीय SOCKS-से-HTTP ब्रिज के साथ आगे बढ़ाएंगे, लेकिन अधिकांश स्क्रैपिंग के लिए HTTP एंडपॉइंट सरल है। प्रॉक्सी पृष्ठ पर और अधिक जानें, और अन्य स्क्रैपिंग गाइड्स देखें।

एक घूर्णन प्रॉक्सी मिडलवेयर

इसे middlewares.py में डालें, settings.py में सक्षम करें, और प्रत्येक अनुरोध आपके पूल से सही ऑथ हेडर के साथ एक प्रॉक्सी चुनता है।

python
# middlewares.py
import base64
import random

USER, PASS, HOST = "USER", "PASS", "proxy.s4m.online"
PROXIES = [f"http://{HOST}:3128"]  # add more endpoints/ports to rotate

class S4mProxyMiddleware:
    def _auth_header(self):
        raw = f"{USER}:{PASS}".encode()
        return b"Basic " + base64.b64encode(raw)

    def process_request(self, request, spider):
        request.meta["proxy"] = random.choice(PROXIES)
        # Scrapy needs the Proxy-Authorization header explicitly:
        request.headers[b"Proxy-Authorization"] = self._auth_header()

# settings.py
DOWNLOADER_MIDDLEWARES = {
    # keep Scrapy's built-in proxy middleware after ours
    "myproject.middlewares.S4mProxyMiddleware": 350,
    "scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 400,
}
CONCURRENT_REQUESTS = 8
DOWNLOAD_DELAY = 0.5
RETRY_ENABLED = True
RETRY_TIMES = 3
RETRY_HTTP_CODES = [429, 500, 502, 503, 504]

इसे कनेक्ट करें

एक साफ परियोजना से एक प्रॉक्सी क्रॉल तक।

मिडलवेयर जोड़ें

अपने प्रोजेक्ट के middlewares.py में S4mProxyMiddleware क्लास को पेस्ट करें और USER, PASS और HOST को अपने s4m क्रेडेंशियल्स और एंडपॉइंट से बदलें।

इसे सेटिंग्स में सक्षम करें

इसे DOWNLOADER_MIDDLEWARES में Scrapy के HttpProxyMiddleware से नीचे की प्राथमिकता पर पंजीकृत करें (छोटा संख्या पहले चलता है), ताकि आपका प्रॉक्सी और हेडर पहले से सेट हो जाएं जब अंतर्निहित मिडलवेयर चलता है।

विनम्रता को समायोजित करें

लक्ष्य की दर सीमा के तहत रहने के लिए DOWNLOAD_DELAY और CONCURRENT_REQUESTS सेट करें, और 429 और 5xx के लिए RETRY_HTTP_CODES सक्षम करें ताकि अस्थायी ब्लॉकों को स्वचालित रूप से पुनः प्रयास किया जा सके।

निकासी IP सत्यापित करें

एक IP-echo एंडपॉइंट जैसे https://api.ipify.org पर पहला अनुरोध जोड़ें और यह पुष्टि करने के लिए प्रतिक्रिया को लॉग करें कि आपकी क्रॉल वास्तव में प्रॉक्सी के माध्यम से बाहर निकल रही है।

घुमाव, पुनः प्रयास और ईमानदारी

वास्तविक रोटेशन के लिए, कई एंडपॉइंट्स को PROXIES में डालें और process_request को प्रत्येक अनुरोध के लिए एक चुनने दें; इसे Scrapy के अंतर्निहित पुनः प्रयास मिडलवेयर के साथ मिलाएं ताकि एक 429 या 503 को ताजा चयन पर पुनः प्रयास किया जा सके। DOWNLOAD_DELAY को गैर-शून्य रखें और समवर्तीता को मध्यम रखें — एक क्रॉलर जो पीछे हटता है, उसे ब्लॉक करना बहुत कठिन है बनिस्बत एक ऐसे क्रॉलर के जो तेजी से दौड़ता है।

दो ईमानदार चेतावनियाँ। पहली, s4m प्रॉक्सी datacenter हैं, आवासीय नहीं: APIs, परीक्षण और मध्यम रूप से सुरक्षित साइटों के लिए उत्कृष्ट, लेकिन आक्रामक एंटी-बॉट सिस्टम डाटासेंटर रेंज को चिह्नित कर सकते हैं। दूसरी, रोटेशन साइट के नियमों की अनदेखी करने का लाइसेंस नहीं है — robots.txt और इसके शर्तों को पढ़ें। जब आपको एक अनुमति सूची के लिए एकल सुसंगत निकास की आवश्यकता हो, तो रोटेट करने के बजाय एक dedicated personal IP जोड़ें। निकास और पोर्ट की जांच करें tools के साथ, और ट्रैफ़िक को प्रतिबद्ध करने से पहले free proxy list के खिलाफ प्रोटोटाइप करें।

FAQ

प्रश्न, उत्तरित

Scrapy मेरे USER:PASS को प्रॉक्सी URL से क्यों नहीं उठाता?

curl के विपरीत, Scrapy का HttpProxyMiddleware URL से क्रेडेंशियल्स को पार्स नहीं करता है। आपको स्वयं एक Proxy-Authorization हेडर सेट करना होगा - USER:PASS से एक बेसिक ऑथ हेडर बनाएं जैसा कि मिडलवेयर उदाहरण में दिखाया गया है।

क्या Scrapy SOCKS5 प्रॉक्सी का उपयोग कर सकता है?

HttpProxyMiddleware के माध्यम से स्वाभाविक रूप से नहीं, जो HTTP-उन्मुख है। Scrapy के लिए पोर्ट 3128 पर HTTP एंडपॉइंट का उपयोग करें, या यदि आपको विशेष रूप से SOCKS5 की आवश्यकता है तो एक स्थानीय SOCKS-से-HTTP ब्रिज चलाएँ।

मैं प्रति अनुरोध प्रॉक्सी कैसे घुमाऊं?

कई प्रॉक्सी एंडपॉइंट्स को एक सूची में डालें और process_request में एक चुनें, हर बार request.meta["proxy"] सेट करें। इसे Scrapy के retry middleware के साथ जोड़ें ताकि एक अवरुद्ध अनुरोध नए चयन पर पुनः प्रयास करे।

क्या ये आवासीय प्रॉक्सी हैं?

नहीं। s4m प्रॉक्सियों को प्रमाणित डेटा सेंटर SOCKS5 और HTTP प्रॉक्सी के रूप में उपयोग किया जाता है, मीटर के अनुसार भुगतान किया जाता है। ये अधिकांश स्क्रैपिंग के लिए उपयुक्त हैं, हालांकि भारी सुरक्षा वाले लक्ष्यों में डेटा सेंटर आईपी रेंज को फ्लैग कर सकते हैं।

अपने स्क्रैपी क्रॉल को स्केल करें

proxy.s4m.online पर प्रमाणित डेटा सेंटर प्रॉक्सी, मीटर किए गए पे-एज़-यू-गो, Scrapy मिडलवेयर के माध्यम से घुमाने के लिए तैयार। जब एक लक्ष्य एक सुसंगत निकासी की अपेक्षा करता है, तो एक समर्पित IP जोड़ें।

लोगों ने इस पृष्ठ को खोजकर पाया

वास्तविक खोज वाक्यांश जिनका यह पृष्ठ उत्तर देता है — लिंक किए गए वाक्यांश उस पृष्ठ को खोलते हैं जो उन्हें गहराई से कवर करता है।