एकीकरण · मध्यवर्ती

एक डाउनलोडर मिडलवेयर के साथ स्क्रैपी में घूर्णन और चिपचिपा प्रॉक्सी

खुरचनी के HttpProxyMiddleware अनुरोध के माध्यम से HTTP प्रॉक्सी को प्रमाणित करने का समर्थन करता है।

2 मिनट पढ़ा 4 खंड समीक्षा संपादकीय टीम Proxy Cyber

सरलतम संस्करण#

पुन: प्रयास करने से पहले प्रतिक्रिया को वर्गीकृत करें। एक 403 एक एक्सेस नियम इंगित कर सकता है कि दूसरा आईपी हल नहीं करेगा। 429 के लिए, रिट्री-अप का सम्मान करें और अनुरोध दर को कम करें; अस्थायी कनेक्शन या सर्वर विफलताओं के लिए बाध्य बैकऑफ का उपयोग करें। केवल जब आप डुप्लिकेट कार्यों को रोक सकते हैं तो रीट्री स्टेट-बदलते ऑपरेशन।

स्पाइडर
import scrapy

PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"

class PricesSpider(scrapy.Spider):
    name = "prices"
    start_urls = ["https://example.com/catalog"]

    def start_requests(self):
        for url in self.start_urls:
            yield scrapy.Request(url, meta={"proxy": PROXY})

    def parse(self, response):
        for href in response.css("a.product::attr(href)").getall():
            yield response.follow(href, callback=self.parse_product, meta={"proxy": PROXY})

    def parse_product(self, response):
        yield {"url": response.url, "price": response.css(".price::text").get()}

प्रति आइटम स्टिकी सत्रों के लिए एक मिडलवेयर#

Middleware.py
import hashlib

class Proxy CyberMiddleware:
    GATEWAY = "res.proxy-cyber.com:9000"

    def __init__(self, user, password, country):
        self.user, self.password, self.country = user, password, country

    @classmethod
    def from_crawler(cls, crawler):
        s = crawler.settings
        return cls(s.get("KEY_PROXY_USER"), s.get("KEY_PROXY_PASS"), s.get("KEY_PROXY_COUNTRY", "us"))

    def process_request(self, request, spider):
        # Sticky when the request carries a session key (e.g. one per product flow), rotating otherwise
        key = request.meta.get("session_key")
        user = f"{self.user}-cc-{self.country}"
        if key:
            sid = hashlib.sha1(key.encode()).hexdigest()[:12]
            user += f"-sid-{sid}-ttl-10m"
        request.meta["proxy"] = f"http://{user}:{self.password}@{self.GATEWAY}"
सेटिंग्स.py
DOWNLOADER_MIDDLEWARES = {
    "myproject.middlewares.Proxy CyberMiddleware": 350,   # before HttpProxyMiddleware (750)
}
KEY_PROXY_USER = "USER"
KEY_PROXY_PASS = "PASS"
KEY_PROXY_COUNTRY = "de"

CONCURRENT_REQUESTS = 32
CONCURRENT_REQUESTS_PER_DOMAIN = 8
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_TARGET_CONCURRENCY = 4.0
DOWNLOAD_TIMEOUT = 45
RETRY_ENABLED = True
RETRY_TIMES = 2
RETRY_HTTP_CODES = [408, 429, 500, 502, 503, 504, 522, 524]
COMPRESSION_ENABLED = True

कनेक्शन का पुन: उपयोग और आईपी असाइनमेंट अलग-अलग नियंत्रण हैं। एक ग्राहक सत्र सॉकेट का पुन: उपयोग करता है; केवल निर्दिष्ट गेटवे घूर्णन और चिपचिपा सत्र व्यवहार को निर्धारित करता है। अपनी सेवा के साथ आपूर्ति किए गए सत्र मापदंडों का उपयोग करें, और कई अनुरोधों पर निकास को सत्यापित करें। एक सॉकेट को बंद करना या कनेक्शन भेजना: बंद एक अलग आईपी की गारंटी नहीं देता है।

बिल को नीचे रखना#

  • स्क्रैपी छवियों या स्क्रिप्ट को लोड नहीं करता है; एचटीएमएल और जेएसओएन केवल, इसलिए एक पृष्ठ अपने एचटीएमएल आकार की लागत रखता है।
  • संपीड़न (डिफ़ॉल्ट) सक्षम करें और बचें Splash जब तक डेटा को इसकी आवश्यकता नहीं होती तब तक ब्राउज़र को प्रदान करना।
  • कैश के साथ HTTPCACHE_ENABLED = True विकास के दौरान इसलिए आप चयनकर्ताओं को डिबगिंग करते समय उसी पृष्ठ को फिर से प्राप्त करने के लिए भुगतान नहीं करते।

प्रति डोमेन विनम्रता#

एक पूल कई विनम्र आगंतुकों होने का एक तरीका है, एक निर्दोष नहीं है। CONCURRENT_REQUESTS_PER_DOMAIN और AutoThrottle प्रत्येक लक्ष्य को प्रति निकास मानव-चूक दर पर रखता है; स्वीकार्य उपयोग नीति कुछ भी है कि एक हमले की तरह लग रहा है मना करता है।

सवाल पूछो#

क्या मुझे scrapy-rotating-proxies की आवश्यकता है?

एक प्रवेश द्वार के साथ नहीं: रोटेशन हर नए कनेक्शन के लिए Proxy Cyber पक्ष पर होता है। वह पैकेज स्थिर प्रॉक्सी की सूची का प्रबंधन करता है; res.proxy-cyber.com के साथ कॉन्फ़िगर करने के लिए एक प्रॉक्सी है।

मैं प्रति अनुरोध एक अलग देश का उपयोग कैसे करूं?

सेट अनुरोध.meta["country"] मकड़ी में और इसे मध्यवेयर में -cc- पैरामीटर बनाने के लिए पढ़ा; उदाहरण ब्रीविटी के लिए एक सेटिंग का उपयोग करता है।

आपका खाता

अपने प्रॉक्सी को एक खाते में प्रबंधित करें

नेटवर्क, प्लेस ऑर्डर की तुलना करें और एक डैशबोर्ड से अपने शेष और समर्थन अनुरोधों का पालन करें। हमारी टीम भुगतान की समीक्षा करती है और वितरण के बाद कनेक्शन विवरण प्रदान करती है।

खाता बनाएँ