Integrasjoner · Mellomliggende nivå

Roterende og klebrig proxyer i Scrapy med en nedlastingsmiddelvare

Scrapy HttpProxyMiddleware støtter autentiserte HTTP-proxyer gjennom Konfigurer den faktiske leverte gatewayen, utbred innstillingen til oppfølgingsforespørsler og verifiser den tildelte øktmodusen før du øker samtidighet.

2 min lesetid 4 seksjoner Gjennomgått Redaksjonsteamet Proxy Cyber

Den enkleste versjonen#

Klassifiser svaret før du prøver på nytt. En 403 kan indikere en tilgangsregel som en annen IP ikke vil løse. For 429, respekter Retry- After og reduser forespørselsfrekvensen; bruk begrenset tilbaketrekking for midlertidige tilkoblinger eller tjenerfeil. Prøv tilstandsendring bare når du kan unngå dupliserte handlinger.

spider. py
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()}

En mellomvare for klebrig økter per elementName#

middlewares. 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}"
settings. 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

En klientøkt bruker sokler på nytt; bare den tildelte gatewayen bestemmer rotasjon og oppførsel for faste økter. Bruk øktparametrene som følger med tjenesten, og bekreft avslutningen over flere forespørsler. Å lukke en sokkel eller sende Connection: close garanterer ikke en annen IP.

Holde regningen nede#

  • Scrapy laster ikke bilder eller skript; HTML og JSON bare, så en side koster sin HTML-størrelse.
  • Aktiver komprimering (standard) og unngå Splash eller nettlesergjengivelse med mindre dataene trenger det.
  • Mellomlager med HTTPCACHE_ENABLED = True Under utvikling, slik at du ikke betaler for å hente de samme sidene mens du feilsøker velgere.

Per- domene høflighet#

Et IP-pool er en måte å være mange høflige besøkende, ikke én uhøflig en. CONCURRENT_REQUESTS_PER_DOMAIN AutoThrottle holder hvert mål på en menneskelig-plausibel hastighet per utgang; Retningslinjer for akseptabel bruk Forbuder alt som ser ut som et angrep.

Spørsmål folk stiller#

Trenger jeg scrapy-rotating-proxies?

Not with a gateway: rotation happens on the Proxy Cyber side for every new connection. That package manages lists of static proxies; with res.proxy-cyber.com there is one proxy to configure.

Hvordan bruker jeg et annet land per forespørsel?

Sett request.meta ["country"] i edderkoppen og les den i mellomvare for å bygge -cc- parameteren; Eksemplet bruker en enkelt innstilling for kortfattethet.

Din konto og passord

Administrer alle proxyene dine fra én konto

Sammenlign nettverk, legg inn bestillinger og følg saldoen din og forespørsler om støtte fra ett dashbord.Vårt team gjennomgår betalinger og gir tilkoblingsdetaljer etter levering.

Opprett konto