Integrationer · Mellemliggende niveau

Roterende og klæbrige proxier i Scrapy med en downloader middleware

Scrapy HttpProxyMiddleware understøtter godkendte HTTP-proxyer via Konfigurer den faktisk leverede gateway, udbred indstillingen til opfølgningsanmodninger og bekræft den tildelte sessionstilstand, før du øger samtidigheden.

2 min læsning 4 sektioner Gennemgået Redaktionsteamet Proxy Cyber

Den enkleste version#

Klassificer svaret, før du forsøger igen. En 403 kan angive en adgangsregel, som en anden IP ikke vil løse. For 429 skal du respektere Retry-After og reducere anmodningsfrekvensen. Brug begrænset tilbagetrækning til midlertidige forbindelser eller serverfejl.

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 middleware til klæbrige sessioner pr. emne#

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

Genbrug af forbindelse og IP-tildeling er forskellige kontrolelementer. En klientsession genbruger sockets, kun den tildelte gateway bestemmer rotation og funktionsmåde for fastlåst session. Brug de sessionsparametre, der leveres med din tjeneste, og bekræft exit over flere anmodninger. Lukning af en socket eller afsendelse af Connection: close garanterer ikke en anden IP.

Hold regningen nede#

  • Scrapy indlæser ikke billeder eller scripts; HTML og JSON kun, så en side koster sin HTML-størrelse.
  • Aktiver komprimering (standard) og undgå Splash eller browser rendering, medmindre dataene har brug for det.
  • Cache med HTTPCACHE_ENABLED = True under udvikling, så du ikke betaler for at hente de samme sider igen, mens du fejlsøger vælgere.

Høflighed pr. domæne#

En pool er en måde at være mange høflige besøgende, ikke én uhøflig. CONCURRENT_REQUESTS_PER_DOMAIN og AutoThrottle holder hvert mål på en menneskelig-plausibel hastighed pr exit; Politik for acceptabel brug forbyder alt, der ligner et angreb.

Spørgsmål folk stiller#

Har jeg brug for scrapy-rotating-proxies?

Ikke med en gateway: rotation sker på Proxy Cyber-siden for hver ny forbindelse.Den pakke håndterer lister over statiske proxyer; med res.proxy-cyber.com er der én proxy at konfigurere.

Hvordan bruger jeg et andet land pr. anmodning?

Sæt request.meta ["land"] i spider og læse det i middleware til at bygge -cc- parameter; eksemplet bruger en enkelt indstilling for kortfattethed.

Din konto er blevet oprettet

Administrer alle dine proxyer fra én konto

Sammenlign netværk, placer ordrer og følg din saldo og supportanmodninger fra ét dashboard Vores team gennemgår betalinger og giver forbindelsesoplysninger efter levering.

Opret konto